{"id":311248,"date":"2020-10-09T21:01:08","date_gmt":"2020-10-09T21:01:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=311248"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=311248","title":{"rendered":"RubyGems Digest 2020\u00b709"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/522648\/\">\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u044f\u0437\u044b\u043a\u0430 Ruby \u0437\u0430 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c 2020 \u0433\u043e\u0434\u0430. \u041d\u043e\u0432\u043e\u0441\u0442\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438. \u0410 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ta\/r3\/1z\/tar31zs8iw9b3e2ms3ypp2d3ugo.png\"><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041d\u043e\u0432\u043e\u0441\u0442\u0438<\/h2>\n<p>  <a href=\"https:\/\/www.ruby-lang.org\/en\/news\/2020\/09\/25\/ruby-3-0-0-preview1-released\/\" rel=\"nofollow\">\u0412\u044b\u0448\u0435\u043b Ruby 3.0.0 Preview 1<\/a>. \u0412 \u043d\u0451\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f RBS, \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e MJIT, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ractor, \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435. \u041d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/twitter.com\/mrkn\/status\/1309533788020461568\" rel=\"nofollow\">\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432 Docker<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oe\/ff\/li\/oeffliqshw1glzzbz-3v9_mft0g.png\"> 4-5 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u044f\u043f\u043e\u043d\u0441\u043a\u0430\u044f <a href=\"https:\/\/rubykaigi.org\/2020-takeout\" rel=\"nofollow\">\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f RubyKaigi Takeout 2020<\/a>. \u041c\u043d\u043e\u0433\u0438\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u044b <a href=\"https:\/\/www.youtube.com\/watch?v=rxJRrccXRfg&amp;list=PLbFmgWm555yZeLpdOLhYwORIF9UjBAFHw&amp;index=4\" rel=\"nofollow\">\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c<\/a>. \u0411\u043e\u043b\u044c\u0448\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u2014 \u043d\u0438\u0436\u0435, \u0432 \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445.<\/p>\n<p>  8 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0438\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0430\u044f <a href=\"https:\/\/2020.rubyday.it\/\" rel=\"nofollow\">\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f RubyDay 2020<\/a>.<\/p>\n<p>  12-13 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0430\u044f <a href=\"https:\/\/rubyc.eu\/\" rel=\"nofollow\">\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f RubyC 2020<\/a>.<\/p>\n<p>  \u0412 Rails 6.1 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/blog.bigbinary.com\/2020\/09\/08\/rails-6-1-adds-minimal-option-support.html\" rel=\"nofollow\">\u043e\u043f\u0446\u0438\u044f &#8212;minimal<\/a>.<\/p>\n<p>  \u0412 Ruby 2.8 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d <a href=\"https:\/\/blog.bigbinary.com\/2020\/09\/15\/ruby-2-8-adds-endless-method-definition.html\" rel=\"nofollow\">\u043d\u043e\u0432\u044b\u0439 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u0431\u0435\u0437 \u0441\u043b\u043e\u0432\u0430 end)<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p-\/uk\/uq\/p-ukuqneqk4dhcimfvdbq0x5cp4.png\"> <a href=\"https:\/\/www.rwpod.com\/posts\/2020\/09\/07\/podcast-08-35.html\" rel=\"nofollow\">RWpod 35 \u0432\u044b\u043f\u0443\u0441\u043a<\/a><br \/>  <a href=\"https:\/\/blog.saeloun.com\/2020\/08\/31\/ruby-adds-experimental-rightward-assignment\" rel=\"nofollow\">\u0412 Ruby \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f<\/a><br \/>  <a href=\"https:\/\/blog.bigbinary.com\/2020\/09\/01\/rails-6-add-timezone-support-in-active-job.html\" rel=\"nofollow\">\u0412 Rails \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u043e\u0432\u044b\u0445 \u043f\u043e\u044f\u0441\u043e\u0432 \u0434\u043b\u044f ActiveJob<\/a><br \/>  <a href=\"https:\/\/evilmartians.com\/chronicles\/system-of-a-test-2-robust-rails-browser-testing-with-siteprism\" rel=\"nofollow\">\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 II: \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u043e\u0435 Rails-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SitePrism<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p-\/uk\/uq\/p-ukuqneqk4dhcimfvdbq0x5cp4.png\"> <a href=\"https:\/\/www.rwpod.com\/posts\/2020\/09\/14\/podcast-08-36.html\" rel=\"nofollow\">RWpod 36 \u0432\u044b\u043f\u0443\u0441\u043a<\/a><br \/>  <a href=\"http:\/\/sinatrarb.com\/2020\/09\/05\/sinatra-2.1.0.html\" rel=\"nofollow\">Sinatra v2.1.0<\/a><br \/>  <a href=\"https:\/\/blog.saeloun.com\/2020\/09\/09\/ruby-adds-name-method-to-symbol\" rel=\"nofollow\">\u0412 \u043a\u043b\u0430\u0441\u0441 Symbol \u0434\u043e\u0431\u0430\u0432\u044f\u0442 \u043c\u0435\u0442\u043e\u0434 name \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430<\/a><br \/>  <a href=\"https:\/\/weblog.rubyonrails.org\/2020\/9\/10\/Rails-5-2-4-4-and-6-0-3-3-have-been-released\/\" rel=\"nofollow\">\u0412\u044b\u0448\u043b\u0438 Rails 5.2.4.4 \u0438 Rails 6.0.3.3<\/a><br \/>  <a href=\"https:\/\/kirshatrov.com\/2020\/09\/08\/ruby-ractor-web-server\/\" rel=\"nofollow\">\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Ractor<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p-\/uk\/uq\/p-ukuqneqk4dhcimfvdbq0x5cp4.png\"> <a href=\"https:\/\/www.rwpod.com\/posts\/2020\/09\/21\/podcast-08-37.html\" rel=\"nofollow\">RWpod 37 \u0432\u044b\u043f\u0443\u0441\u043a<\/a><br \/>  <a href=\"https:\/\/blog.saeloun.com\/2020\/09\/16\/ruby-3.0-to-add-support-for-forwarding-arguments-along-with-lead-arguments\" rel=\"nofollow\">\u0412 Ruby \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/a><br \/>  <a href=\"https:\/\/www.speedshop.co\/2020\/09\/17\/we-made-puma-faster-with-sleep-sort.html\" rel=\"nofollow\">\u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 Puma \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Sleep Sort<\/a><br \/>  <a href=\"https:\/\/blog.appsignal.com\/2020\/09\/16\/rails-concers-to-concern-or-not-to-concern.html\" rel=\"nofollow\">Rails Concerns: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Concern \u0438\u043b\u0438 \u043d\u0435\u0442<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p-\/uk\/uq\/p-ukuqneqk4dhcimfvdbq0x5cp4.png\"> <a href=\"https:\/\/www.rwpod.com\/posts\/2020\/09\/28\/podcast-08-38.html\" rel=\"nofollow\">RWpod 38 \u0432\u044b\u043f\u0443\u0441\u043a<\/a><br \/>  <a href=\"https:\/\/www.ruby-lang.org\/en\/news\/2020\/09\/25\/ruby-3-0-0-preview1-released\/\" rel=\"nofollow\">\u0412\u044b\u0448\u0435\u043b Ruby 3.0.0 Preview 1<\/a><br \/>  <a href=\"https:\/\/blog.bigbinary.com\/2020\/09\/22\/rails-6-1-deprecates-rails-db-structure-dump.html\" rel=\"nofollow\">\u0412 Rails 6.1 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b rails db:structure:dump \u0438 rails db:structure:load<\/a><br \/>  <a href=\"https:\/\/github.com\/ruby\/date\/commit\/58ca6e6a3ee20c72a77266e0f74920b12a06ee9d\" rel=\"nofollow\">\u0412 Ruby \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u043a\u043b\u0430\u0441\u0441 DateTime<\/a><\/p>\n<h2>\u041d\u043e\u0432\u0438\u043d\u043a\u0438<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t-\/xh\/qq\/t-xhqqekquqr3nosk_tg264y4nc.png\"> <a href=\"https:\/\/github.com\/deseretbook\/classy_hash\/tree\/v1.0.0\" rel=\"nofollow\">Classy Hash 1.0.0<\/a> \u2014 \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0441\u0445\u0435\u043c \u0434\u043b\u044f \u0445\u044d\u0448\u0435\u0439<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t-\/xh\/qq\/t-xhqqekquqr3nosk_tg264y4nc.png\"> <a href=\"https:\/\/github.com\/modosc\/cloudflare-rails\/tree\/v1.0.0\" rel=\"nofollow\">Cloudflare::Rails 1.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Rails \u0434\u043b\u044f <a href=\"https:\/\/www.cloudflare.com\/\" rel=\"nofollow\">CloudFlare<\/a><\/p>\n<h2>\u041d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438<\/h2>\n<p>  <a href=\"https:\/\/github.com\/puma\/puma\/tree\/v5.0.0\" rel=\"nofollow\">Puma 5.0.0<\/a> \u2014 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f Ruby\/Rack-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  <a href=\"https:\/\/github.com\/fnando\/browser\/tree\/v5.0.0\" rel=\"nofollow\">Browser 5.0.0<\/a> \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 ActionController.<\/p>\n<p>  <a href=\"https:\/\/github.com\/airbrake\/airbrake\/tree\/v11.0.0\" rel=\"nofollow\">Airbrake 11.0.0<\/a> \u2014 \u043e\u043d\u043b\u0430\u0439\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/docker-api\/versions\/2.0.0\" rel=\"nofollow\">docker-api 2.0.0<\/a> \u2014 \u0433\u0435\u043c, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f <a href=\"https:\/\/docs.docker.com\/engine\/api\/sdk\/\" rel=\"nofollow\">Docker Engine API<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/couchbase\/couchbase-ruby-client\/tree\/3.0.0\" rel=\"nofollow\">Couchbase Ruby Client 3.0.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f <a href=\"https:\/\/www.couchbase.com\/\" rel=\"nofollow\">Couchbase<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/danmayer\/coverband\/tree\/v5.0.0\" rel=\"nofollow\">Coverband 5.0.0<\/a> \u2014 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/castle-rb\/versions\/5.0.0\" rel=\"nofollow\">Castle-rb 5.0.0<\/a> \u2014 \u0437\u0430\u0449\u0438\u0442\u0430 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043e\u0442 \u0432\u0437\u043b\u043e\u043c\u0430.<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/foreman-tasks\/versions\/3.0.0\" rel=\"nofollow\">Foreman-tasks 3.0.0<\/a> \u2014 \u0434\u0432\u0438\u0436\u043e\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <a href=\"https:\/\/theforeman.org\/\" rel=\"nofollow\">Foreman<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/hunterae\/blocks\/tree\/v4.0.0\" rel=\"nofollow\">Blocks 4.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 MVC-\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/p>\n<p>  <a href=\"https:\/\/github.com\/hawkular\/hawkular-client-ruby\/tree\/v5.0.0\" rel=\"nofollow\">Hawkular Client 5.0.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 <a href=\"https:\/\/www.hawkular.org\/\" rel=\"nofollow\">Hawkular<\/a><\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/waterdrop\/versions\/2.0.0.rc1\" rel=\"nofollow\">Waterdrop 2.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 <a href=\"https:\/\/kafka.apache.org\/\" rel=\"nofollow\">Kafka<\/a> \u0441 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/ruby-bandwidth\/versions\/3.0.0\" rel=\"nofollow\">Ruby-bandwidth 3.0.0<\/a> \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0437\u0432\u043e\u043d\u043a\u043e\u0432 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 <a href=\"https:\/\/dev.bandwidth.com\/\" rel=\"nofollow\">Bandwidth<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/rgeo\/rgeo-shapefile\/tree\/v3.0.0\" rel=\"nofollow\">Rgeo-shapefile 3.0.0<\/a> \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0433\u0435\u043e\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/rgeo\/rgeo\" rel=\"nofollow\">RGeo<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/tansengming\/stripe-rails\/tree\/2.0.0\" rel=\"nofollow\">Stripe-rails 2.0.0<\/a> \u2014 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 <a href=\"https:\/\/stripe.com\/\" rel=\"nofollow\">Stripe<\/a><\/p>\n<h2>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  <a href=\"https:\/\/github.com\/hopsoft\/stimulus_reflex\/tree\/v3.3.0\" rel=\"nofollow\">StimulusReflex 3.3.0<\/a> \u2014 frontend-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 real-time \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c Ruby on Rails<\/p>\n<p>  <a href=\"https:\/\/github.com\/rails\/webpacker\/tree\/v5.2.0\" rel=\"nofollow\">Webpacker 5.2.0<\/a> \u2014 \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 webpack \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Javascript-\u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0432 Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>  <a href=\"https:\/\/github.com\/sinatra\/sinatra\/tree\/v2.1.0\" rel=\"nofollow\">Sinatra 2.1.0<\/a> \u2014 DSL \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/rack-protection\/versions\/2.1.0\" rel=\"nofollow\">Rack::Protection 2.1.0<\/a> \u2014 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u0435\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 web-\u0430\u0442\u0430\u043a.<\/p>\n<p>  <a href=\"https:\/\/yhbt.net\/unicorn.git\/tag\/?h=v5.7.0\" rel=\"nofollow\">Unicorn 5.7.0<\/a> \u2014 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 Rack-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c<\/p>\n<p>  <a href=\"https:\/\/github.com\/haml\/haml\/tree\/v5.2.0\" rel=\"nofollow\">Haml 5.2.0<\/a> \u2014 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f HTML.<\/p>\n<p>  <a href=\"https:\/\/github.com\/bblimke\/webmock\/tree\/v3.9.0\" rel=\"nofollow\">WebMock 3.9.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439 \u043d\u0430 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 Ruby.<\/p>\n<p>  <a href=\"https:\/\/github.com\/MiniProfiler\/rack-mini-profiler\/tree\/v2.1.0\" rel=\"nofollow\">Rack-mini-profiler 2.1.0<\/a> \u2014 \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440, \u0437\u0430\u043c\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/p>\n<p>  <a href=\"https:\/\/github.com\/newrelic\/newrelic-ruby-agent\/tree\/6.13.0\" rel=\"nofollow\">New Relic Ruby Agent 6.13.0<\/a> \u2014 \u0430\u0433\u0435\u043d\u0442 New Relic \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/faker-ruby\/faker\/tree\/v2.14.0\" rel=\"nofollow\">Faker 2.14.0<\/a> \u2014 \u043f\u043e\u0440\u0442 Perl-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/metacpan.org\/pod\/Data::Faker\" rel=\"nofollow\">Data::Faker<\/a> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<p>  <a href=\"https:\/\/github.com\/ruby-amqp\/bunny\/tree\/2.17.0\" rel=\"nofollow\">Bunny 2.17.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f <a href=\"https:\/\/www.rabbitmq.com\/\" rel=\"nofollow\">RabbitMQ<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/seattlerb\/ruby_parser\/tree\/v3.15.0\" rel=\"nofollow\">Ruby_parser 3.15.0<\/a> \u2014 \u043f\u0430\u0440\u0441\u0435\u0440 \u044f\u0437\u044b\u043a\u0430 Ruby \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Ruby, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 s-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/brakemanscanner.org\/blog\/2020\/09\/28\/brakeman-4-dot-10-dot-0-released\" rel=\"nofollow\">Brakeman 4.10.0<\/a> \u2014 \u0441\u043a\u0430\u043d\u0435\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f Ruby on Rails<\/p>\n<p>  <a href=\"https:\/\/github.com\/activeadmin\/activeadmin\/tree\/v2.8.0\" rel=\"nofollow\">Active Admin 2.8.0<\/a> \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u043a \u0432\u0435\u0431\u0441\u0430\u0439\u0442\u0443<\/p>\n<p>  <a href=\"https:\/\/github.com\/ammar\/regexp_parser\/tree\/v1.8.0\" rel=\"nofollow\">Regexp::Parser 1.8.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/p>\n<p>  <a href=\"https:\/\/github.com\/rubocop-hq\/rubocop-rails\/tree\/v2.8.0\" rel=\"nofollow\">RuboCop Rails 2.8.0<\/a> \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0439 \u043f\u043e \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u043c\u0443 \u0441\u0442\u0438\u043b\u044e \u043a\u043e\u0434\u0430 \u0432 Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445<\/p>\n<p>  <a href=\"https:\/\/github.com\/groonga\/groonga-command\/tree\/1.5.0\" rel=\"nofollow\">Groonga-command 1.5.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 <a href=\"https:\/\/groonga.org\/\" rel=\"nofollow\">Groonga<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/thbar\/kiba\/tree\/v3.5.0\" rel=\"nofollow\">Kiba 3.5.0<\/a> \u2014 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0430\u044f ETL \u0434\u043b\u044f Ruby<\/p>\n<p>  <a href=\"https:\/\/github.com\/activeadmin\/arbre\/tree\/v1.3.0\" rel=\"nofollow\">Arbre 1.3.0<\/a> \u2014 DSL \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f HTML<\/p>\n<p>  <a href=\"https:\/\/github.com\/icalendar\/icalendar\/tree\/v2.7.0\" rel=\"nofollow\">iCalendar 2.7.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <a href=\"https:\/\/tools.ietf.org\/html\/rfc5545\" rel=\"nofollow\">iCalendar<\/a><\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/gon\/versions\/6.4.0\" rel=\"nofollow\">Gon 6.4.0<\/a> \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 Rails-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 Js-\u043a\u043e\u0434\u0435<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/ancestry\/versions\/3.2.0\" rel=\"nofollow\">Ancestry 3.2.0<\/a> \u2014 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 ActiveRecord \u0432 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435<\/p>\n<p>  <a href=\"https:\/\/github.com\/k0kubun\/hamlit\/tree\/v2.13.0\" rel=\"nofollow\">hamlit 2.13.0<\/a> \u2014 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Haml<\/p>\n<p>  <a href=\"https:\/\/github.com\/github\/scientist\/tree\/v1.5.0\" rel=\"nofollow\">Scientist 1.5.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043a\u043e\u0434\u0430<\/p>\n<p>  <a href=\"https:\/\/github.com\/ruby-grape\/grape-swagger\/tree\/v1.3.0\" rel=\"nofollow\">Grape-swagger 1.3.0<\/a> \u2014 \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f API \u043d\u0430 <a href=\"https:\/\/github.com\/ruby-grape\/grape\" rel=\"nofollow\">Grape<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/markets\/invisible_captcha\/tree\/v1.1.0\" rel=\"nofollow\">Invisible Captcha 1.1.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u043f\u0430\u043c-\u0431\u043e\u0442\u043e\u0432<\/p>\n<p>  <a href=\"https:\/\/github.com\/janko\/down\/tree\/v5.2.0\" rel=\"nofollow\">Down 5.2.0<\/a> \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<p>  <a href=\"https:\/\/github.com\/zendesk\/racecar\/tree\/v2.1.0\" rel=\"nofollow\">Racecar 2.1.0<\/a> \u2014 \u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f Kafka-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432<\/p>\n<p>  <a href=\"https:\/\/github.com\/travis-ci\/travis.rb\/tree\/v1.10.0\" rel=\"nofollow\">Travis 1.10.0<\/a> \u2014 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f <a href=\"https:\/\/travis-ci.org\/\" rel=\"nofollow\">Travis CI<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/ruby-amqp\/march_hare\/tree\/v4.3.0\" rel=\"nofollow\">March_hare 4.3.0-java<\/a> \u2014 RabbitMQ-\u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f JRuby \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f Java<\/p>\n<p>  <a href=\"https:\/\/github.com\/rpush\/rpush\/tree\/v5.1.0\" rel=\"nofollow\">Rpush 5.1.0<\/a> \u2014 \u0441\u0435\u0440\u0432\u0438\u0441 push-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/unicode-emoji\/versions\/2.6.0\" rel=\"nofollow\">Unicode::Emoji 2.6.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044e\u043d\u0438\u043a\u043e\u0434-\u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u044d\u043c\u043e\u0434\u0437\u0438<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/karafka\/versions\/1.4.0\" rel=\"nofollow\">karafka 1.4.0<\/a> \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Kafka<\/p>\n<p>  <a href=\"https:\/\/github.com\/litaio\/lita\/tree\/v4.8.0\" rel=\"nofollow\">Lita 4.8.0<\/a> \u2014 \u0447\u0430\u0442-\u0431\u043e\u0442 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0447\u0430\u0442-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/p>\n<p>  <a href=\"https:\/\/github.com\/ClosureTree\/closure_tree\/tree\/v7.2.0\" rel=\"nofollow\">Closure Tree 7.2.0<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432 ActiveRecord-\u043c\u043e\u0434\u0435\u043b\u044f\u0445<\/p>\n<p>  <a href=\"https:\/\/github.com\/tristandunn\/pusher-fake\/tree\/v2.2.0\" rel=\"nofollow\">pusher-fake 2.2.0<\/a> \u2014 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044f Pusher-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<p>  <a href=\"https:\/\/github.com\/axyjo\/leaflet-rails\/tree\/v1.7.0\" rel=\"nofollow\">Leaflet-rails 1.7.0<\/a> \u2014 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 <a href=\"https:\/\/leafletjs.com\/\" rel=\"nofollow\">leaflet.js<\/a> \u043a Rails<\/p>\n<p>  <a href=\"https:\/\/rubygems.org\/gems\/rails_multisite\/versions\/2.5.0\" rel=\"nofollow\">Rails Multisite 2.5.0<\/a> \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/p>\n<p>  <a href=\"https:\/\/github.com\/gocardless\/ibandit\/tree\/v1.2.0\" rel=\"nofollow\">Ibandit 1.2.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/IBAN\" rel=\"nofollow\">IBAN<\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/ankane\/blind_index\/tree\/v2.2.0\" rel=\"nofollow\">Blind Index 2.2.0<\/a> \u2014 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<p>  <a href=\"https:\/\/github.com\/fnando\/validators\/tree\/v3.4.0\" rel=\"nofollow\">Validators 3.4.0<\/a> \u2014 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 ActiveModel\/ActiveRecord \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u043e\u0432<\/p>\n<p>  <a href=\"https:\/\/github.com\/signalfx\/signalfx-ruby\/tree\/v3.1.0\" rel=\"nofollow\">Signalfx 3.1.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 <a href=\"https:\/\/docs.signalfx.com\/en\/latest\/\" rel=\"nofollow\">SignalFx<\/a><\/p>\n<h2>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f <a href=\"https:\/\/evrone.ru\/\" rel=\"nofollow\">Evrone<\/a> \u043f\u0440\u043e\u0432\u0435\u043b\u0430 \u043c\u0430\u0440\u0430\u0444\u043e\u043d \u043a\u0435\u0439\u0441\u043e\u0432, \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Ruby \u0438\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0438\u043c.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/dev\/156025-marafon-keysov-evrone-den-7-klyuchevye-idei-iz-intervyu-s-sozdatelem-ruby-on-rails\" rel=\"nofollow\">\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0438\u0434\u0435\u0438 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c Ruby on Rails<\/a> (\u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/evrone.ru\/dhh-interview\" rel=\"nofollow\">\u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0414\u044d\u0432\u0438\u0434\u043e\u043c \u0425\u0430\u043d\u0441\u0441\u043e\u043d\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c<\/a>).<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/evrone\/158411-marafon-keysov-evrone-den-15-420on-cz-media-portal-na-ruby-dvizhke\" rel=\"nofollow\">\u041c\u0435\u0434\u0438\u0430-\u043f\u043e\u0440\u0442\u0430\u043b \u043d\u0430 Ruby-\u0434\u0432\u0438\u0436\u043a\u0435<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/services\/162719-marafon-keysov-evrone-den-30-vexor-chto-nuzhno-znat-esli-sozdaete-produkt-dlya-razrabotchikov\" rel=\"nofollow\">Vexor \u2014 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432?<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/evrone\/157122-marafon-keysov-evrone-den-10-svyazyvaem-obychnye-i-kriptovalyuty-s-cryptopay\" rel=\"nofollow\">\u0421\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u044b \u0441 Cryptopay<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/evrone\/155720-marafon-keysov-evrone-den-5-ocifrovyvaem-konsultanta-s-planshetom\" rel=\"nofollow\">\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u0430 \u0441 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043e\u043c<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/evrone\/160791-marafon-keysov-evrone-den-23-work-play-prevrashchaem-motivaciyu-personala-v-igru\" rel=\"nofollow\">Work&amp;Play \u2014 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0430 \u0432 \u0438\u0433\u0440\u0443<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/evrone\/161440-marafon-keysov-evrone-den-25-quiv-konvertiruem-znaniya-v-pomoshch-blagotvoritelnym-fondam\" rel=\"nofollow\">Quiv \u2014 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u043d\u0430\u043d\u0438\u044f \u0432 \u043f\u043e\u043c\u043e\u0449\u044c \u0431\u043b\u0430\u0433\u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0444\u043e\u043d\u0434\u0430\u043c<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/design\/162059-marafon-keysov-evrone-den-28-aydentika-konferencii-rubyrussia\" rel=\"nofollow\">\u0410\u0439\u0434\u0435\u043d\u0442\u0438\u043a\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 RubyRussia<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bv\/n3\/ce\/bvn3ce5hflnbd7nfz-w4qyl6ikc.png\"> <a href=\"https:\/\/habr.com\/ru\/post\/519660\/\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/finiam\/reactive-rails-applications-with-stimulusreflex-48kn\" rel=\"nofollow\">\u0420\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e StimulusReflex<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/leastbad\/stimulusreflex-v3-3-morphs-has-been-released-o3e\" rel=\"nofollow\">\u0412\u044b\u0448\u0435\u043b StimulusReflex v3.3<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/dtroyano86\/coming-from-javascript-to-ruby-1hd5\" rel=\"nofollow\">\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 JavaScript \u043d\u0430 Ruby<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oe\/ff\/li\/oeffliqshw1glzzbz-3v9_mft0g.png\"> <a href=\"https:\/\/www.youtube.com\/watch?v=PJLWoz6K7w4\" rel=\"nofollow\">\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c Ruby \u0432 Web \u0447\u0435\u0440\u0435\u0437 WebAssembly?<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oe\/ff\/li\/oeffliqshw1glzzbz-3v9_mft0g.png\"> <a href=\"https:\/\/www.youtube.com\/watch?v=zLInIisYlDo\" rel=\"nofollow\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0438 \u043a\u0430\u043a \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Ruby?<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oe\/ff\/li\/oeffliqshw1glzzbz-3v9_mft0g.png\"> <a href=\"https:\/\/www.youtube.com\/watch?v=281YdMYRAsk\" rel=\"nofollow\">\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b Rack \u0438 Rails<\/a> \u0441 <a href=\"https:\/\/github.com\/oracle\/truffleruby\" rel=\"nofollow\">TruffleRuby<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oe\/ff\/li\/oeffliqshw1glzzbz-3v9_mft0g.png\"> <a href=\"https:\/\/www.youtube.com\/watch?v=oqBTlYUkGXk\" rel=\"nofollow\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 Dreamcast-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0438\u0433\u0440 \u043d\u0430 mruby<\/a><\/p>\n<p>  <a href=\"https:\/\/hackernoon.com\/when-is-ruby-on-rails-the-right-choice-b5163tmr\" rel=\"nofollow\">\u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 Ruby on Rails \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440?<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/solutelabs\/why-ruby-on-rails-is-still-a-good-choice-in-2020-i1a\" rel=\"nofollow\">\u041f\u043e\u0447\u0435\u043c\u0443 Ruby on Rails \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0432\u044b\u0431\u043e\u0440 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 2020 \u0433\u043e\u0434\u0443?<\/a><\/p>\n<p>  <a href=\"https:\/\/www.infoworld.com\/article\/3583989\/ruby-3-previews-parallel-execution.html\" rel=\"nofollow\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 Ruby 3 preview<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/baweaver\/ruby-3-set-literal-3fp9\" rel=\"nofollow\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 Set \u0432 Ruby 3<\/a><\/p>\n<p>  <a href=\"https:\/\/www.honeybadger.io\/blog\/ruby-currency\/\" rel=\"nofollow\">\u0414\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0432 Ruby<\/a><\/p>\n<p>  <a href=\"https:\/\/hackernoon.com\/the-faqs-of-rubocup-rh103t7v\" rel=\"nofollow\">11 \u0447\u0430\u0441\u0442\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e RubyCop<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p-\/uk\/uq\/p-ukuqneqk4dhcimfvdbq0x5cp4.png\"> <a href=\"https:\/\/devchat.tv\/ruby-rogues\/rr-470-performance-improvement-of-ruby-3-0-jit-with-takashi-kokubun\/\" rel=\"nofollow\">\u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441 Ruby 3.0 JIT<\/a><\/p>\n<p>  <a href=\"https:\/\/hackernoon.com\/profiling-the-obvious-step-after-benchmarking-your-ruby-code-8d183tvk\" rel=\"nofollow\">\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0448\u0430\u0433 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430<\/a><\/p>\n<p>  <a href=\"https:\/\/janko.io\/the-complexity-of-activerecord-transactions\/\" rel=\"nofollow\">\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c ActiveRecord-\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439<\/a><\/p>\n<p>  <a href=\"https:\/\/engineering.shopify.com\/blogs\/engineering\/shopify-monolith\" rel=\"nofollow\">\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438: \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 Shopify<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=BQkAGgSCoZ4\" rel=\"nofollow\">dry-system \u2014 \u0434\u043b\u044f \u0447\u0435\u0433\u043e? \u043e\u0442 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043a \u043f\u043e\u043b\u043d\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=IGpPiukWW14\" rel=\"nofollow\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043c\u043e\u0439 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/danimal141\/the-difference-between-mocks-stubs-and-spies-11k9\" rel=\"nofollow\">\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 Mocks, Stubs \u0438 Spies<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/emilyjo84160559\/top-5-best-testing-ruby-gems-for-building-ruby-on-rails-web-application-13mc\" rel=\"nofollow\">5 \u043b\u0443\u0447\u0448\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Ruby on Rails<\/a><\/p>\n<p>  <a href=\"https:\/\/guilhermesimoes.github.io\/blog\/writing-good-test-descriptions\" rel=\"nofollow\">\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u043a \u0442\u0435\u0441\u0442\u0430\u043c<\/a><\/p>\n<p>  <a href=\"https:\/\/www.reddit.com\/r\/ruby\/comments\/it8spw\/function_composition_python_vs_ruby\/\" rel=\"nofollow\">\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439: Python vs Ruby<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p-\/uk\/uq\/p-ukuqneqk4dhcimfvdbq0x5cp4.png\"> <a href=\"https:\/\/5by5.tv\/rubyonrails\/337\" rel=\"nofollow\">\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u043e\u043d\u043e\u043b\u0438\u0442<\/a><\/p>\n<p>  <a href=\"https:\/\/everydayrails.com\/2020\/09\/20\/command-line-alternatives.html\" rel=\"nofollow\">\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/appsignal\/introduction-to-ruby-on-rails-patterns-and-anti-patterns-2mhc\" rel=\"nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0438 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b Ruby on Rails<\/a><\/p>\n<p>  <a href=\"https:\/\/www.bacancytechnology.com\/blog\/common-mistakes-in-ruby-on-rails-development\" rel=\"nofollow\">\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0430 Ruby on Rails (\u0438 \u043a\u0430\u043a \u0438\u0445 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c)<\/a><\/p>\n<p>  <a href=\"https:\/\/www.mcartoixa.me\/blog\/software-craftsmanship\/2020\/09\/21\/continuous-integration-for-ruby.html\" rel=\"nofollow\">\u041d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f Ruby<\/a><\/p>\n<p>  <a href=\"https:\/\/thibautbarrere.com\/2020\/09\/19\/managing-bundler-and-rubygems-with-ansible\" rel=\"nofollow\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 RubyGems \u0438 Bundler<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/www.ansible.com\/\" rel=\"nofollow\">Ansible<\/a><\/p>\n<p>  <a href=\"https:\/\/rubyyagi.com\/rails-deploy-automate-ansible\/\" rel=\"nofollow\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f Rails-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ansible \u0438 Capistrano<\/a><\/p>\n<p>  <a href=\"https:\/\/www.mikeperham.com\/2020\/09\/10\/whats-new-in-sidekiq-2020-edition\/\" rel=\"nofollow\">\u0427\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0432 Sidekiq, \u0432\u044b\u043f\u0443\u0441\u043a 2020<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=_OgHNsQ3F10&amp;feature=emb_title\" rel=\"nofollow\">\u041a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u0438\u043d\u0433 \u0432 \u0422\u043e\u0440<\/a><\/p>\n<p>  <a href=\"https:\/\/www.honeybadger.io\/blog\/link-vulnerabilities\/?utm_source=rubyweekly&amp;utm_medium=email&amp;utm_campaign=ruby\" rel=\"nofollow\">\u0421\u043e\u0432\u0435\u0442\u044b \u0438 \u043f\u0440\u0438\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/planetargon\/top-10-technical-podcasts-as-chosen-by-the-rails-community-4k88\" rel=\"nofollow\">10 \u043b\u0443\u0447\u0448\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u043e\u0432 (\u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 Rails-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430)<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/nkemjiks\/explaining-s-o-l-i-d-principles-with-ruby-code-examples-2636\" rel=\"nofollow\">\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 SOLID \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a><\/p>\n<p>  <a href=\"https:\/\/dev.to\/rootstrap\/most-useful-gems-for-ruby-on-rails-api-2mnn\" rel=\"nofollow\">\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f API \u043d\u0430 Ruby on Rails<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/post\/516722\/\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 Ruby Digest<\/a><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/522648\/\"> https:\/\/habr.com\/ru\/post\/522648\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/522648\/\">\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u044f\u0437\u044b\u043a\u0430 Ruby \u0437\u0430 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c 2020 \u0433\u043e\u0434\u0430. \u041d\u043e\u0432\u043e\u0441\u0442\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438. \u0410 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ta\/r3\/1z\/tar31zs8iw9b3e2ms3ypp2d3ugo.png\">  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-311248","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=311248"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311248\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=311248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=311248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=311248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}