{"id":457292,"date":"2025-04-24T21:00:31","date_gmt":"2025-04-24T21:00:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=457292"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=457292","title":{"rendered":"<span>Markdown \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e-\u043d\u043e\u0432\u043e\u043c\u0443: \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 Nintendo, \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0438\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>PS: \u0440\u0435\u043f\u043e\u0441\u0442 \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 Towards Data Scien\u0441e.<\/p>\n<\/blockquote>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a87\/432\/438\/a8743243853e45f4c32a74bda765a854.gif\" alt=\"\u041a\u0430\u043a \u0443\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0417\u0435\u043c\u043d\u0443\u044e \u043e\u0441\u044c!?\" title=\"\u041a\u0430\u043a \u0443\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0417\u0435\u043c\u043d\u0443\u044e \u043e\u0441\u044c!?\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a87\/432\/438\/a8743243853e45f4c32a74bda765a854.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a87\/432\/438\/a8743243853e45f4c32a74bda765a854.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0430\u043a \u0443\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0417\u0435\u043c\u043d\u0443\u044e \u043e\u0441\u044c!?<\/figcaption><\/div>\n<\/figure>\n<h3>PDF-\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e?<\/h3>\n<p>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 <em>\u0441\u0432\u0438\u0441\u0442\u043e\u043f\u0435\u0440\u0434\u0435\u043b\u043a\u0438<\/em>, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b \u0432 PowerPoint 15\u201320 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0448\u043b\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043b\u0430\u043d. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 LibreOffice \u0438 MS Office (\u0434\u0430\u0436\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0434\u043b\u044f Windows \u0438 Mac), \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u2014 \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043d\u0430 \u201c\u0441\u0446\u0435\u043d\u0435\u201d \u043f\u0440\u043e\u043f\u0430\u0434\u0451\u0442.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u044b: \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e PDF-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 GIF-\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0443\u0448\u0430\u044e\u0442 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f), \u043a\u0430\u043a \u043d\u0438 \u0432 \u0441\u0435\u0431\u044f.<\/p>\n<h4>\u041d\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b<\/h4>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 <em>\u0441\u0432\u0438\u0441\u0442\u043e\u043f\u0435\u0440\u0434\u0435\u043b\u043a\u0438<\/em> \u043e\u0442 \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0441\u0443\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043c\u0435\u0434\u0438\u0430-\u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universal_3D\" rel=\"noopener noreferrer nofollow\">ECMA-363<\/a><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c9\/557\/5cd\/7c95575cd88b2e8d6b301a71f472b8e6.png\" alt=\"Convert MATLAB Figure to 3D PDF \/ Ioannis F. Filippidis\u00a0(fig2u3d manual)\" title=\"Convert MATLAB Figure to 3D PDF \/ Ioannis F. Filippidis\u00a0(fig2u3d manual)\" width=\"1024\" height=\"837\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7c9\/557\/5cd\/7c95575cd88b2e8d6b301a71f472b8e6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7c9\/557\/5cd\/7c95575cd88b2e8d6b301a71f472b8e6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Convert MATLAB Figure to 3D PDF \/ <a href=\"https:\/\/github.com\/johnyf\/fig2u3d\" rel=\"noopener noreferrer nofollow\">Ioannis F. Filippidis<\/a>\u00a0(fig2u3d manual)<\/figcaption><\/div>\n<\/figure>\n<p>3D \u043c\u043e\u0434\u0435\u043b\u044c \u0432 PDF \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0412\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0433\u043b\u043e\u0432 \/ \u0441\u0440\u0435\u0437\u043e\u0432, \u0438 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 GIF \u0438\u043b\u0438 \u0447\u0435\u043c-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c. <\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u043e\u0431\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f <em>\u0444\u0438\u0447\u0430<\/em> \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0433\u0434\u0435, \u043a\u0440\u043e\u043c\u0435 Adobe Acrobat, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u0441\u043a\u0430\u0447\u043e\u043a \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c,  \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043d\u043e\u0432\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043b\u0430\u0439\u0434\u0430\u043c.<\/p>\n<h3>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043d\u0430\u0443\u0447\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f DPG<\/h3>\n<p><a href=\"https:\/\/www.dpg-physik.de\/aktivitaeten-und-programme\/tagungen\/fruehjahrstagungen\/2025\" rel=\"noopener noreferrer nofollow\"><strong>DPG-Fr\u00fchjahrstagung<\/strong><\/a> \u2014 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u043f\u043d\u0430\u044f \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043f\u043e \u0444\u0438\u0437\u0438\u043a\u0435, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c\u044b\u0435 \u041d\u0435\u043c\u0435\u0446\u043a\u0438\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u0449\u0435\u0441\u0442\u043e\u043c (DPG). \u0415\u0436\u0435\u0433\u043e\u0434\u043d\u043e \u043e\u043d\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"10^4\" alt=\"10^4\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ee\/912\/b60\/9ee912b6015c34ce7bc0c986be4efeeb.svg\" width=\"28\" height=\"21\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ee\/912\/b60\/9ee912b6015c34ce7bc0c986be4efeeb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ee\/912\/b60\/9ee912b6015c34ce7bc0c986be4efeeb.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0443\u0447\u0435\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0432 \u0433\u043e\u0440\u043e\u0434\u0430\u0445 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438, \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u0438\u0437\u0438\u043a\u0438<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/185\/72f\/152\/18572f152bcae87f1545832854d3e350.png\" alt=\"Deutsche Physikalische Gesellschaft\" title=\"Deutsche Physikalische Gesellschaft\" width=\"605\" height=\"259\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/185\/72f\/152\/18572f152bcae87f1545832854d3e350.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/185\/72f\/152\/18572f152bcae87f1545832854d3e350.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Deutsche Physikalische Gesellschaft<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/168\/65a\/1e8\/16865a1e889242790d7f443bcd13ede0.png\" alt=\"DPG2025 (\u0412\u0435\u0441\u0435\u043d\u043d\u044f\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430) \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u0420\u0435\u0433\u0435\u043d\u0441\u0431\u0443\u0440\u0433 \/ Tobi &amp;Chris, Pexels License\" title=\"DPG2025 (\u0412\u0435\u0441\u0435\u043d\u043d\u044f\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430) \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u0420\u0435\u0433\u0435\u043d\u0441\u0431\u0443\u0440\u0433 \/ Tobi &amp;Chris, Pexels License\" width=\"1024\" height=\"683\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/168\/65a\/1e8\/16865a1e889242790d7f443bcd13ede0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/168\/65a\/1e8\/16865a1e889242790d7f443bcd13ede0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>DPG2025 (\u0412\u0435\u0441\u0435\u043d\u043d\u044f\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430) \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u0420\u0435\u0433\u0435\u043d\u0441\u0431\u0443\u0440\u0433 \/ <a href=\"https:\/\/www.pexels.com\/@tobiandchris\/\" rel=\"noopener noreferrer nofollow\">Tobi &amp;Chris<\/a>, Pexels License<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043c \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432, \u0438 \u0434\u043b\u0438\u0442\u0441\u044f \u043e\u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0434\u0435\u043b\u044e, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043b\u043e\u0445\u043e. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u044d\u0442\u043e \u043d\u0435 \u0443\u043c\u0430\u043b\u044f\u0435\u0442 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u0437\u043d\u0430\u0442\u044c <em>\u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0435\u0437\u0434\u0430 \u0443\u0436\u0435 \u0443\u0448\u043b\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f<\/em>.<\/p>\n<p>\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438 \u043f\u043b\u0435\u043d\u0430\u0440\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u2014 \u043c\u0430\u0433\u0438\u0441\u0442\u0440\u0430\u043d\u0442\u044b, PhD-\u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b (\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e), \u0430 \u0440\u0435\u0436\u0435 \u2014 \u043f\u043e\u0441\u0442\u0434\u043e\u043a\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0430 &#8212; \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \ud83d\udca1 <em>\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a<\/em>.<\/p>\n<h3>\u0427\u0442\u043e \u0437\u0430 JoyCon<\/h3>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0435\u043b \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/089\/16a\/9af\/08916a9aff4ec61d7aadb7396717b1a0.png\" alt=\"\u0423\u043a\u0430\u0437\u043a\u0430-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0432 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0418\u0418 \/ \u201cPPT Clicker\u201d image using Dalle 3 by OpenAI\" title=\"\u0423\u043a\u0430\u0437\u043a\u0430-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0432 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0418\u0418 \/ \u201cPPT Clicker\u201d image using Dalle 3 by OpenAI\" width=\"1024\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/089\/16a\/9af\/08916a9aff4ec61d7aadb7396717b1a0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/089\/16a\/9af\/08916a9aff4ec61d7aadb7396717b1a0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0423\u043a\u0430\u0437\u043a\u0430-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0432 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0418\u0418 \/ \u201cPPT Clicker\u201d image using Dalle 3 by OpenAI<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u043b\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0441\u043b\u0430\u0439\u0434\u043e\u0432, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043b\u0430\u0437\u0435\u0440\u043d\u043e\u0439 \u0443\u043a\u0430\u0437\u043a\u0438, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u043f\u043e Bluetooth \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 <em>\u0434\u043e\u043d\u0433\u043b<\/em>. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0438 \u043f\u043e-\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a \u0443 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 Nintendo Switch \u0438\u0437 2017-\u043e\u0433\u043e<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/99c\/a8f\/b97\/99ca8fb975271c38aca1299273889426.png\" alt=\"JoyCon (R)\" title=\"JoyCon (R)\" width=\"1024\" height=\"787\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/99c\/a8f\/b97\/99ca8fb975271c38aca1299273889426.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/99c\/a8f\/b97\/99ca8fb975271c38aca1299273889426.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>JoyCon (R)<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043e\u043d \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <em>\u043f\u043b\u044e\u0448\u043a\u0438<\/em><\/p>\n<ul>\n<li>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a \ud83d\udd79\ufe0f<\/p>\n<\/li>\n<li>\n<p>11 \u043a\u043d\u043e\u043f\u043e\u043a \u260e\ufe0f<\/p>\n<\/li>\n<li>\n<p>IR \u043a\u0430\u043c\u0435\u0440\u0430 \ud83d\udcf8 (\u0441\u043b\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0434\u043e\u043a\u043e\u0432 \u043f\u043e API)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 IMU \ud83c\udf10 (Inertial Measurements Unit) aka \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>Bluetooth \u0441\u0432\u044f\u0437\u044c; \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 HID<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043d\u043e\u043f\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a PowerPoint \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043a \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438, \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043c\u044b\u0448\u0438 \u0438\u043b\u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.hackster.io\/leo49\/right-joy-con-controller-as-a-presentation-remote-5810e4\" rel=\"noopener noreferrer nofollow\">Hackster: Right Joy-con Controller as a Presentation Remote<\/a> (Python)<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/medium.com\/@mimming\/nintendo-switch-joy-con-presentation-remote-5a7e08e7ad11\" rel=\"noopener noreferrer nofollow\">Medium: Nintendo Switch Joy-Con Presentation Remote<\/a> (USB Override MacOS)<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u043a\u0430\u043a-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c IMU \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a. \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0439\u0442\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b PowerPoint \u0438 PDF \ud83e\uddd9\ud83c\udffc\u200d\u2642\ufe0f<\/p>\n<h3>\u041a\u043b\u0430\u0434\u0435\u043c \u0441\u043b\u0430\u0439\u0434\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/h3>\n<p>\u0418\u0434\u0435\u044f <a href=\"https:\/\/habr.com\/ru\/articles\/414757\/\" rel=\"noopener noreferrer nofollow\">&#171;\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0439&#187;<\/a> \u043d\u0435 \u043d\u043e\u0432\u0430, <\/p>\n<p>\u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0432\u0441\u0435\u043c. \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u044f \u043f\u043e\u043a\u0430\u0437 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0439 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0431\u0430: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, JavaScript, \u043c\u0430\u0433\u0438\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u043d\u0430 CSS \u0438 \u043c\u043d\u043e\u0433\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0438\u0434\u0435\u043e. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e <strong>\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e<\/strong> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435.<\/p>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u044b \u0432 Markdown \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 (\u0445\u043e\u0442\u044f, \u0441\u043a\u043e\u0440\u0435\u0435, \u044d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430) \u2014 <a href=\"https:\/\/revealjs.com\/markdown\/\" rel=\"noopener noreferrer nofollow\">RevealJS<\/a><\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/680a9839159a09bab05b95ec\" data-style=\"\" id=\"680a9839159a09bab05b95ec\" width=\"\"><\/div>\n<p>\u0423 <em>RevealJS<\/em> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 API, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434 JavaScript \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e<\/p>\n<pre><code class=\"javascript\">setTimeout(() =&gt;{   Reveal.navigateNext(1); \/\/ \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0434 }, 1000)<\/code><\/pre>\n<p>\u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u0438\u043d\u0443\u0441\u044b. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0430 \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043d\u0435\u0433\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b \u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 JavaScript-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043e\u0434\u0438\u043d HTML-\u0444\u0430\u0439\u043b, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443. \u041b\u0438\u0431\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<h4>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 Jupyter Notebook<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f Python \u0438 IPYNB, \u0442\u043e\u0433\u0434\u0430 \u0431\u0435\u0440\u0438\u0442\u0435 nbconvert \u2014 \u043e\u043d \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0430\u0448 \u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e RevealJS, \u0438 \u0432\u044b \u0434\u0430\u0436\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435! \u0418\u043b\u0438, \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0449\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Jupyter \u2014 <a href=\"https:\/\/github.com\/damianavila\/RISE\" rel=\"noopener noreferrer nofollow\">RISE<\/a><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d71\/c23\/4a7\/d71c234a7afacf6717a990609ff26058.png\" alt=\"RISE Extension\" title=\"RISE Extension\" width=\"1338\" height=\"641\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d71\/c23\/4a7\/d71c234a7afacf6717a990609ff26058.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d71\/c23\/4a7\/d71c234a7afacf6717a990609ff26058.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>RISE Extension<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0434\u0435\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u0443 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 JoyCon.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0430\u043c\u0438 \u043d\u0430\u00a0<a href=\"https:\/\/mybinder.org\/v2\/gh\/damianavila\/RISE\/master?filepath=examples%2FREADME.ipynb\" rel=\"noopener noreferrer nofollow\">Binder<\/a>! \u041f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043e\u0432.<\/p>\n<h4>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 WLJS Notebook<\/h4>\n<p>\u041c\u043e\u0451 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a <a href=\"https:\/\/wljs.io\" rel=\"noopener noreferrer nofollow\">WLJS<\/a> \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u044b\u043c (\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0438\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c, \u0432\u0435\u0434\u044c \u044f \u0438 <a class=\"mention\" href=\"\/users\/kirillbelovtest\">@KirillBelovTest<\/a> \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 <em>\u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u0435\u0440\u044b<\/em> \u0432 <a href=\"https:\/\/github.com\/JerryI\/wolfram-js-frontend\" rel=\"noopener noreferrer nofollow\">\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>. <\/p>\n<p>\u042d\u0442\u0430 IDE \u0441 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0442\u0435\u0441\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u0432\u0435\u0431-\u0441\u0440\u0435\u0434\u043e\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043b\u0430\u0439\u0434\u044b \u0442\u0443\u0434\u0430 \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0430 \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c Markdown<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af2\/423\/7c5\/af24237c5b944029dd1cc2282caa11fe.png\" alt=\"WLJS Notebook \/ https:\/\/wljs.io\" title=\"WLJS Notebook \/ https:\/\/wljs.io\" width=\"1020\" height=\"776\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/af2\/423\/7c5\/af24237c5b944029dd1cc2282caa11fe.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af2\/423\/7c5\/af24237c5b944029dd1cc2282caa11fe.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>WLJS Notebook \/ <a href=\"https:\/\/wljs.io\" rel=\"noopener noreferrer nofollow\">https:\/\/wljs.io<\/a><\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u044b \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u043e \u0442\u043e, <a href=\"https:\/\/habr.com\/ru\/articles\/853496\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u044b \u0442\u0430\u043c<\/a>. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 RevealJS \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0444\u0444\u043b\u0430\u0439\u043d<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u043d\u043e \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u043e\u0434\u043e\u0431\u043d\u043e LaTeX Beamer<\/p>\n<\/li>\n<\/ol>\n<h3>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 JoyCon<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <a href=\"https:\/\/github.com\/tomayac\/joy-con-webhid\" rel=\"noopener noreferrer nofollow\">joy-con-webhid<\/a>. \u0412\u0435\u0434\u044c \u0437\u0430\u0447\u0435\u043c \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0435\u0441\u043b\u0438 \u043b\u044e\u0434\u0438 \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0441\u0451 \u0437\u0430 \u043d\u0430\u0441<\/p>\n<pre><code class=\"bash\">npm install joy-con-webhid --prefix .<\/code><\/pre>\n<blockquote>\n<p>\u0412\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0437 WLJS Notebook. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Python + FAST API \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 JavaScript \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435, \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e JS. \u041e\u043d\u043b\u0430\u0439\u043d-\u0432\u0435\u0440\u0441\u0438\u044f \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/jerryi.github.io\/wljs-demo\/PresenterJoyCon.html\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043b\u0435\u0442\u0438\u0442 \u043a \u043d\u0430\u043c \u0441 \u043f\u043e\u0440\u0442\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">.esm  import { connectJoyCon, connectedJoyCons } from 'joy-con-webhid';  \/\/ Create connect button const connectButton = document.createElement('button'); connectButton.className = 'relative cursor-pointer rounded-md h-6 pl-3 pr-2 text-left text-gray-500 focus:outline-none ring-1 sm:text-xs sm:leading-6 bg-gray-100'; connectButton.innerText = \"Connect\";  let connectionState = \"Connect\"; let isJoyConConnected = false; let lastUpdateTime = performance.now(); let isAllowedToConnect = false;  \/\/ main handler function (warning! called at 60FPS) function handleJoyConInput(detail) {   const currentTime = performance.now();   if (currentTime - lastUpdateTime &gt; 50) { \/\/ slow down     lastUpdateTime = currentTime;      console.log(detail);   } }  \/\/ JoyCon periodically goes to sleep, we need to wake it up const connectionCheckInterval = setInterval(async () =&gt; {   if (!isAllowedToConnect) return;    const connectedDevices = connectedJoyCons.values();   isJoyConConnected = false;    for (const joyCon of connectedDevices) {     isJoyConConnected = true;     if (joyCon.eventListenerAttached) continue;      await joyCon.open();     await joyCon.enableStandardFullMode();     await joyCon.enableIMUMode();     await joyCon.enableVibration();     await joyCon.rumble(600, 600, 0.5);      joyCon.addEventListener('hidinput', ({ detail }) =&gt; handleJoyConInput(detail));     joyCon.eventListenerAttached = true;   }    updateConnectionState(); }, 2000);  \/\/ Update button state function updateConnectionState() {   if (isJoyConConnected &amp;&amp; connectionState !== \"Connected\") {     connectionState = \"Connected\";     connectButton.innerText = connectionState;     connectButton.style.background = '#d8ffd8';   } else if (!isJoyConConnected &amp;&amp; connectionState !== \"Connect\") {     connectionState = \"Connect\";     connectButton.innerText = connectionState;     connectButton.style.background = '';   } }  \/\/ Handle click event connectButton.addEventListener('click', async () =&gt; {   isAllowedToConnect = true;   if (!isJoyConConnected) {     await connectJoyCon();   } });  \/\/ Just decorations const container = document.createElement('div'); container.innerHTML = `&lt;small&gt;Presenter controller&lt;\/small&gt;`; container.appendChild(connectButton); container.className = 'flex flex-col gap-y-2 bg-white rounded-md shadow-md';  \/\/ Return DOM element to the page this.return(container);  \/\/ When a cell got removed this.ondestroy(() =&gt; {   cancelInterval(connectionCheckInterval); });<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f<\/p>\n<pre><code class=\"javascript\">function handleJoyConInput(detail) {   const currentTime = performance.now();   if (currentTime - lastUpdateTime &gt; 50) { \/\/ slow down     lastUpdateTime = currentTime;      console.log(detail); \/\/output to the console   } }<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u043e\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u201cConnect\u201d. \u041d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u2014 \u0438\u0445 \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0442\u0435, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>this.return(dom)<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 <code>DOMElement<\/code> \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/p>\n<\/li>\n<li>\n<p><code>this.ondestroy(function)<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>function<\/code> \u0435\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0443 \u0443\u0434\u0430\u043b\u0438\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0438 \u0442.\u043f.<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 <code>.esm<\/code> \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 Javascript \u0432 WLJS Notebook, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 <em>\u0431\u0430\u043d\u0434\u043b\u0438\u043d\u0433<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u0443 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0441 \u043a\u043e\u0434\u043e\u043c, \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7fb\/252\/570\/7fb252570b46188a539937c6896d7ff3.png\" alt=\"\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 DOM\" title=\"\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 DOM\" width=\"780\" height=\"84\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7fb\/252\/570\/7fb252570b46188a539937c6896d7ff3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7fb\/252\/570\/7fb252570b46188a539937c6896d7ff3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 DOM<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442:<\/p>\n<p>1.\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0442 Nintendo Switch (System \u2192 Controllers \u2192 Disconnect).<\/p>\n<p>2.\u0421\u043f\u0430\u0440\u0438\u0442\u044c JoyCon (R) \u0441 \u041f\u041a, \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f \u043c\u0435\u043b\u043a\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u0431\u043e\u043a\u0443.<\/p>\n<p>3.\u041d\u0430\u0436\u0430\u0442\u044c \u201cConnect\u201d \u043d\u0430 \u043d\u0430\u0448\u0435\u043c presenter controller.<\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"json\">{     \"buttonStatus\": {         \"y\": false,         \"x\": false,         \"b\": false,         \"a\": false,         \"r\": false,         \"zr\": false,         \"sr\": false,         \"sl\": false,         \"plus\": false,         \"rightStick\": false,         \"home\": false,     },     \"analogStickRight\": {         \"horizontal\": \"0.1\",         \"vertical\": \"0.3\"     },     \"actualAccelerometer\": {         \"x\": 0,         \"y\": 0,         \"z\": 0     },     \"actualGyroscope\": {         \"dps\": {             \"x\": 0,             \"y\": 0,             \"z\": 0         },         \"rps\": {             \"x\": 0,             \"y\": 0,             \"z\": 0         }     } }<\/code><\/pre>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e! \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u0431\u043b\u0430\u0433\u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \ud83d\udca1<\/p>\n<h4>\u041a\u043d\u043e\u043f\u043a\u0438 \u0438 \u043f\u0443\u0433\u043e\u0432\u0438\u0446\u044b \ud83d\udd18<\/h4>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u043e\u0432<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/94b\/dd9\/905\/94bdd9905512c1d438c81125ee9b0769.png\" alt=\"\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a\" title=\"\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a\" width=\"3009\" height=\"2262\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/94b\/dd9\/905\/94bdd9905512c1d438c81125ee9b0769.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/94b\/dd9\/905\/94bdd9905512c1d438c81125ee9b0769.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u0440\u0435\u0434\u0435 WLJS \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0443 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Wolfram, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 API \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 RevealJS<\/p>\n<pre><code class=\"1c\">FrontSlidesSelected[\"navigateNext\", 1] \/\/ FrontSubmit<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0434\u0451\u0440\u0433\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e \u0449\u0435\u043b\u0447\u043a\u0443 \u043a\u043d\u043e\u043f\u043a\u0438 (\u0438\u043b\u0438 \u043f\u0443\u0433\u043e\u0432\u0438\u0446\u044b). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Wolfram \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u0437 \u043c\u0438\u0440\u0430 Javascript, \u0433\u0434\u0435 \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0af\/c7d\/235\/0afc7d2352388733a65e17924281aea7.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b WLJS \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b WLJS \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438\" width=\"2362\" height=\"980\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0af\/c7d\/235\/0afc7d2352388733a65e17924281aea7.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0af\/c7d\/235\/0afc7d2352388733a65e17924281aea7.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b WLJS \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u044f\u0447\u0435\u0439\u043a\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u0438 <strong>\u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">\/\/.... \/\/....... const buttonStates = { \/\/all buttons states on JoyCon (R)   a: false, b: false, home: false, plus: false, r: false, sl: false, sr: false,   x: false, y: false, zr: false };  const joystickPosition = [0.0, 0.0]; let restingJoystick = [0.0, 0.0]; let isCalibrated = false;   function handleJoyConInput(detail) {   if (!isCalibrated) { \/\/calibration     restingJoystick = [Number(detail.analogStickRight.horizontal), Number(detail.analogStickRight.vertical)];     isCalibrated = true;     return;   }    const currentTime = performance.now();   if (currentTime - lastUpdateTime &gt; 50) {     lastUpdateTime = currentTime;      let buttonPressed = false;     let joystickMoved = false;      for (const key of Object.keys(buttonStates)) {       if (!buttonStates[key] &amp;&amp; detail.buttonStatus[key]) buttonPressed = true;       buttonStates[key] = detail.buttonStatus[key];     }      const verticalOffset = Number(detail.analogStickRight.vertical) - restingJoystick[1];     const horizontalOffset = Number(detail.analogStickRight.horizontal) - restingJoystick[0];      if (Math.abs(verticalOffset) &gt; 0.1 || Math.abs(horizontalOffset) &gt; 0.1) {       joystickMoved = true;     }      joystickPosition[0] = horizontalOffset;     joystickPosition[1] = -verticalOffset;      if (buttonPressed) {       for (const key of Object.keys(buttonStates)) {         if (buttonStates[key]) {           server.kernel.io.fire('JoyCon', true, key);           break;         }       }     }      if (joystickMoved) {       server.kernel.io.fire('JoyCon', joystickPosition, 'Stick');     }   } } \/\/....... \/\/..<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u043d\u043a\u0442\u043e\u0432<\/p>\n<ul>\n<li>\n<p><strong>\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0443 \u0441\u0442\u0438\u043a\u0430<\/strong> &#8212; \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u0441\u0442\u0438\u043a\u0438 <em>\u0434\u0440\u0438\u0444\u0442\u044f\u0442<\/em>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u043b\u044c<\/p>\n<\/li>\n<li>\n<p><strong>\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043d\u043e\u043f\u043e\u043a<\/strong> &#8212; \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u0434\u043e\u043b\u0431\u0438\u0442\u044c \u0432 \u0434\u0432\u0435\u0440\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u042d\u0442\u043e \u0441\u043d\u0438\u0437\u0438\u0442 \u0441\u0442\u0440\u0435\u0441\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<li>\n<p><strong>\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432 \u043f\u0443\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/strong> &#8212; \u0441\u0443\u0433\u0443\u0431\u043e \u0432\u0435\u0449\u044c WLJS, \u0433\u0434\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u0430\u0448\u0438\u043d\u0443 Wolfram (\u0438\u043b\u0438 \u041f\u0438\u0442\u043e\u043d \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 Jupyter)<\/p>\n<\/li>\n<\/ul>\n<p><em>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0443\u043d\u043a\u0442<\/em> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0432 \u0432\u0430\u0448\u0435\u0439 \u0441\u0440\u0435\u0434\u0435)<\/p>\n<pre><code class=\"javascript\">server.kernel.io.fire(String name, Object state, String pattern);<\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Wolfram \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043a\u0430\u043a<\/p>\n<pre><code class=\"1c\">EventHandler[\"name\", {   \"pattern\" -&gt; Function[state,     Print[state];   ] }]<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 Javascript \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u043a. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a:<\/p>\n<p>\u2022<strong>ZR<\/strong> \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434<\/p>\n<p>\u2022<strong>Y<\/strong> \u2014 \u043d\u0430\u0437\u0430\u0434<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c<\/p>\n<pre><code class=\"1c\">EventHandler[\"JoyCon\", {   \"zr\" -&gt; (FrontSubmit[FrontSlidesSelected[\"navigateNext\", 1]]&amp;),   \"y\" -&gt; (FrontSubmit[FrontSlidesSelected[\"navigatePrev\", 1]]&amp;),   \"Stick\" -&gt; Print }];<\/code><\/pre>\n<h3>\u0418\u0441\u043f\u044b\u0442\u0430\u0435\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435<\/h3>\n<p>\u0421\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e <\/p>\n<pre><code class=\"markdown\">.slide  # \u0421\u043b\u0430\u0439\u0434 1  __\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!__   ---   ![](https:\/\/upload.wikimedia.org\/wikipedia\/en\/7\/7d\/Lenna_%28test_image%29.png)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c <strong>JoyCon<\/strong> \u043a \u041f\u041a \u0438 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0435\u0433\u043e \u043a \u043d\u0430\u0448\u0435\u043c\u0443 Javascript \u0441\u043a\u0440\u0438\u043f\u0442\u0443, \u043d\u0430\u0436\u0430\u0432 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Connect<\/em>. <\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 Node \u0434\u043b\u044f \u0431\u0430\u043d\u0434\u043b\u0438\u043d\u0433\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043d\u0435\u0442 NodeJS \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (\u0431\u0430\u043d\u0434\u043b\u0438\u043d\u0433\u0430) Javascript, \u0442\u043e \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0441\u0436\u0430\u0442\u044b\u0439 \u043a\u043e\u0434 \u0433\u0440\u0443\u043f\u043f\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u0443\u044e \u043f\u0443\u0441\u0442\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0435. \u0422\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u044e\u0442\u0441\u044f.<\/p>\n<pre><code>jsfc4uri1%3AeJztfWtz28aWoGtmdqdq99NU7Q9oa3ZiUiJpAqRkmYqccWTnxlNx4vXjfvGqHJBoSkhAgAJAiaSj%2FRf7af%2FsnnO6G%2BhuNEjKj3vvVN1UTAHd531Ovx%2B4P05fT%2F%2Fh3r17%2BT%2FBz09RXkz%2FEd%2F%2BO%2Fw8zfN0EgVFlCYVyOtFzN%2Fgw7OgCN78v3%2B5d6%2FH89n%2F7nt%2BNJunWcE%2BskmaJHxS%2FEe6OkuTjnrloUjI2S2bZumMPfgtXXUhs3vDx5dR%2BOAEieC%2Fhw%2FZWcaDgrMgCVlerGLOikuuCIE4bLwoijRBYEjMC5X1PSWzUxamk8WMJ0VvQoSexxzfWg8E3oP2iUStkHqTOMjzn4MZB%2FQHGY9B72vgucjyNOvO0ygpeMaydJGEPOzOQnbZPWLzuDtg86zrs4Ivi27Mp4V4usiCVfew32dTECQfpYsijhLeTdKEsyxKLroey2cjAl3m%2BBjzIMT0Iza%2BENhev%2F%2FAIWYEL9lbQAQx985E1l5pupgXmpneFGhEGw5holw440z5BqCmQZzzEgKsUbybh0DgbUQ2mfNsmmazIJnwXpLetNolU%2BECYVpimQP4R8xhLBgJuh02Lp8u0xkvX%2BYx2Ee9ZOVTHlePZaoguSxzVuXTWsEgyK0lGcRZXkST31%2BleUTRc8re93v9DoOf81LhjANQcvEfEtgNFOVnQRyNs8Blsmi2eJ4E49iVlT%2BN4%2FSGh29TaXIDREa9wGYvXr5jszTkLJqyQKAJZTLeE25DiFMW5KtkwlpBdpF3GE%2Bu2%2Bz0ibK7IUtwE0QgA0bwPOPoIUJ63z8XeCem1UCSHxaJKGhFyi6hFIJUwLkLrIHMfFEg2FTBCAApGea2QmASxe1SmClr3ddNV%2BYwl9l%2FXszGPJNEekESxOnFG8x8HV1cFr3LNIvWaVIEcbvDtsBe8wxeAFK4EBlaLiyyBT%2BphCkWWSJfb5U9GJOVzCLLoBbZWB6Esjpk1y5KT9hhHwzAwMwilXEQcwWps1wJUit9GsWTSi4A5KrkvQJL5lboKQhVAl6m1xaEggJVQGxS83e%2BYumU%2FTL%2BDcK0B295Sy%2Fbbc150rV69ntAOGfffMOkS6q8hchr1%2BQ1XMBYndppI7ES7VZXRuihfP%2FLdJpzLG%2B7xgq4zIrK917FSRCvgnBX8lrYOhjIOqYMUjDry6C47AXjvGUq0oYA6vc89scfrISwpZEwhqfsGDCsbpjPri9BOIC3eZw0gnsI3jWlrmlXVVCGlDnPABGiLkt43IvS3jTKeOuBqFwedHRQxh48nUx4zKEzwaFqezBSMXsdxAuel56YFIsgNkDbHYPMn1ZZmk%2FSOd9MogTrhfO8XVG47bAHUCM%2FaLvNidoaIW8o%2FKkFT6erlRULZrtBMQw6yLp9YiKOoef0u5F2q6ncqKkRZndyrR1HYFUqPrZd5Z%2BSM9Sjr3gWpSFGW7xik0sO7Qjatex5qsYrr%2FUYgc8Zwr%2FAxhGcDpEL0areWrKJNVpW0ZjZ7XlbbzyMVkMJ8YxfRxPqG9k9YhVtZROysXcmYLS4%2BY2AMXRsXpr9XTSNKkA6D%2FJ70B4lBY4FOPQ1nxZFACYFXwJ1qLMWZsMh%2BhYSEcpG0qrcZeRxKu0QqkkYZOEPizh%2BCX2czdBQqrYD%2FZkac3BkE1gGFXPMW0d96M3RT7932DaUkIBBGD7XVW89gHEJ9XcgPFsfZSvEbikcGns97ROLrNOcpvm1YrSgZv%2FM7MRL1aCm8fv9fiV81YcQNQF794KNA2xW4VkbL%2BVIxOi0NbDRo7weMtCs26OL%2B6fV%2BIKHe1rENY9DAO7EgnKMbiz8BgwaHvbGweT3Cxqc4ejtX8Pj6TQ8fqCMyziUHVVw76jTbhp9XX0e6FGi13s%2Fiq659P0kxg40RVt93FiPbQKHwHbVca7hihaublNqlhLlz5gIKEun0MIePmLlEsAYOdsweg%2Bj62roLqCFhX98%2B%2FInwPv123wGTcATbGc5jdcRLktjaPi%2FfSjyfrXwgznUWeHZZRSHLcNiNiNjfmAa8yXDn%2B4kjdlFMO%2Buuj4O3W8uIwgMbZogvwzC9AaeqvmN4jLKe6K1aJX022Z2Cvg5iL5qGY6Z4HAjLpunhkZMVhbtE8e0zdvVnL%2F5L%2FBAdZYF8M84rxPl8zhYvflv8DyByncWZVma3WlW6H%2F833v3IDoTwP4AA1nIyx%2Bakz0PQwjDh7MgvLiBIOz9lht100uZ3sqD2RxaAalWh6VzzK%2BaNfkOHlFP0Cv%2BeHuit7%2BCxg8ZvwIwjw%2FYQ2aSldA0koIavCLWo1eg2O8NNaAoiaATHImxiwIN0xeQHGF6IOYYTkWJYd%2BJppuN9AKEdK76KFCHXXnwF1qlK1%2F%2BHeBfDTDjk2j%2BxlCjVAITJGhpPmXWpz%2B%2BfiNaB2hHWxfLDrtYwb81FHl4DuA5WGtltmT1MwxrjeFjDlLlIGnuw7%2BBkXX1LC1QB%2Fjjiz8D8WdogF37V0ADfj369ekXIK%2BHlD6k9CGlH9PzMT5f9TH3ysOUK8K6GlxV%2FIk32qp3yPZZqwuG3GcXSxhdgSnhaYVPA3xatw0kv0ICJxDOgcRZlzgrE2dg4xB1T%2BAcSJyliTO0cQjSK7F9C4eq1VawpODpY8sUrLTntXg2xwGlx4AXou6Dc4ELIO7jzwGi7ZOj9%2FdZF6TRuvQIfurwOSP0hpx1Uw76GIRApa76Zrqn0j0z3Vfpvpk%2BUOkDPX1I9Ic1%2BkOiP6zRHxL9YY3%2BMcEf1%2BCPCf7YhscohHTyoMEYAxMzPJvSldDsqqYahi9mDGzdcuRACu4L7ANhHulNlYMMu8Kg6F2dgCcIkCzIpSvsKAkIo0kiIq8vAqQrsA6EWSSP6k3KIggHa51jaVxJVwrd14T269JIjr7g4RscfYOjX%2BM4KN0s9dSMUWrpS64iz7cNZZSXHIWFnwO03z7%2BHKBe%2B%2FhzgPzgaeAqOYjoLgVIqCHHb8wZNOWIKq57KlomlNXK9PVMz8oc6Jm%2BlTnUM6tYLEf24MiDUynAvt0GVdWcp6D8TVC%2BghpsghooqOEGKMOBslCqapUCSYaRqpSvHA68anDfVYPzrhpcd%2BV03K3VHk%2ByNM8%2FzDPoCU2KVtX2dtgYnsfwPF4bM%2BLYM2QfcaGDqvExNkpUjSPsaiSfsaGjCn8MlNYj%2BYzlS2At2W2DQBx6ZNnT5AL6ZT9k6ezFbPE6CA3BZvA8g%2BfZ2hz%2BQH9qHhWTS5zgE7OPMJ73CZVe86sMNKy1PVUTJ2gUsznWV82GgQYfx%2BkOPL%2BGJ2E7RLW3lH9X8u%2FapoHDAaChSY9UJbxfh59kCnqS5i3EtiHyuYLIo6RF9qmBZDqIi8gKbTpDywHDLhgei2VmAS0JCP1cCiTYga0JF%2FjsozwHgsBEvNpz12Kt0fLh6rID9NsntTCU4B3h%2BY4wYFNoFen%2FWkCHM0vgxW9pgVaLo8lKt6sG2VPy7VcTNZolV7old0abzJu4iXh285o38dqAZMaLjkSGczPKmhi5cErP3IyEh0G5fbTnQel%2F%2BIGAhgok1%2FO7KiBk%2FmqkJVT4E5W%2F1unniJ%2Fr4E0xgAOkXWsTjuOtO9VHlukiHA9ZURfUyrzeZkRXvRtQgP4c4J%2BleFuKt5V4W4m3tXhzdJ%2BpUyhpOVuSU0Xb2Z6cKl7OVuVU8a7nGsNPewpx4yiwYQioW7fDQh4XAS4zvuETo1Gyx6A6IA6Sm9prMVdUCm2uHm6IlHqP5GsOUC%2BB8eXKSMK%2BLMpDf1fy71qMYkX6WPxi2pCeh2OR7x7rQrp8868sIcVAt08D3b4c%2Bg7Koa9HKR6liGEwETQGw2jmmRg5XqdRCENG8MlsZSes7QRtsDnTBpszNdjU3XWniQWjz60tq%2BtdzL8P4P%2BWBvCGJNTLmC1Vx2K2Un2KmVOSWaMks0ZJZhunEjAy5WQCSWJnr4zslZ29NrLXZrZXEfdcxL%2FqNAZVA7p0NpqGWMNunozoi8mIvi2f5FbnhFVMmWHwaJzX8AQpr0bKE6S8GqnGmRChpEPBpimSy6Xq%2B5INuioKaKx%2FoJwuR34CTk4siBkCAeprCWs1TyCgUVT1PDBZY6zJmJTsBDVNkLUafsrwIl5dCScEkRJcabM7mgyrOl9sYcqOIY6sLpHuJRbKSwS%2FNBbtsSWijReloGpGRgqhSjCJrQs6UAOOymJ%2BabEqU0guRbam5saqQKHMZs66yjFmc%2FpSWMxryYkgOWvTJ9sFy3blLQHRL%2BUj0GDVJoTxWhWWFtkM%2FmK13VVORXEFLYJsSU7Ip00%2Bx8xWV%2BLKeBJEvbZOlUoAIZr0%2BnLmAZPRlzJzWROLVDsgVXUCUloxv4dCExmjERUzfGIWbbO5%2BpvNNVTVXguZlTNw8lEYDJubygaDzzRsZYmKZv%2BT7dqq3NQV8VV306db2VdFaKuZBzuY2d%2FFzBB4w3FZY7gN9BlW93RPfr7V%2B5rV%2FS9l9YGIbW%2Br0f1NRtdN2VyGP6dm6GtU%2Fc%2BuGbwvY72%2FT2mzv09p%2F0WmtMuZJ7F7aOQYEXZoUA%2BjQV5UczIt1%2FT2zYjhqHcJfzyai8KR7XqEEpQzS%2FJJ3%2FOydVfBPMhyLrcUXAcZw1MZakcBGDjhN9UGA09OMSNchtt0dwIMQj%2FkOH%2FqHffZQ9E%2Fe%2FWC8svpF9yF9WYxawVZhgPiCCwB1uClIeSRg0WsNtJqG%2FpoOyDu5yPk%2Bsyp2AuOk0SSaoswzHGogrpfjvetYSfyZqflQzUt8F3JYaRyD1SSXajMwNAUujWsMeNB0jK1kShop5dlbodJVXDPi6bUbc22Ok7NuMJOMU8uCpwxJzDQkCWLOAb1%2BqAYpfUEyIkhkUT7rtmFDxXMiP0c%2FOwQcBLEk0UMwN8HBWCtfuLXPFaaaQEQY7rknt%2FQnLKAet%2FXd%2FJOQBB2PKqcR3i4%2FWwKCu1ptaC5aZfwhi68GQ%2BjxWwLpu%2FCjNObLWieC22SRbQbfAtu34XLZ%2FNi1YwY8mkAUefkehlkF1Fyseesxirr36qifVbuF8N9UkDiI6jD9n7Cg11yD%2FFeBwzD9mhTv5Y2gLRXWapR2JOVF9IdR0FOc0mPDsu0Nc%2FS71U6pFU5ORiKq4HfqxcQb75ZuRTp82rKvIWHRf5MO4hxIk7uUe%2BwQN%2Fx3mFyuexFaJWSJL0BVs8gWI1jLCIzxBqiot8rohnPC2jBoHi0ELPrzMUiglutRtU%2BJheNU2R%2BYgpDjaC2lqgrgbPp%2BwybQTN55U5eU3K7LkEQzy9x3YF65soN1JurAR1UFqX5%2BLDQz%2FmQuPeteVKNhtxPRt43qVOOTnwpiGNvE6UaK4lqBpDR8ZBsVVX5Gu2LYDZrYCuydL6rnfgiVNfF2O4YkNVGVbBRu3LsPT7GgOl6ThvvYzvarhpSSBgO%2Buzf2ON%2Bu1ekP0RLHraO2hBNDbgO1MGRgduhbuHIIYLsLpoSmKhktJ11EibeRNFSRENogL91NDFGFaD1tK6s4n2DpVusUsGvUdiWS8qioUhvaWStVpRFE0C9lZG1XlMWDYF6akLH9n9L9ZH29YV2GrwphjihrMjcgJWXOO%2B%2Fwmn1Nc6y39y0nQ6sCMvFa1wxNQjTCoAUHYg4fblRvpUkc1AaB%2BXrKgEPnAI2OEnzDJY5qpVjV2WM1Uk9woztmVU3treQC3pAsrcUtT7uYKC%2Fa8EE0%2BnvSv5d11aQDZJWh90q33rf%2BPO4q66iQdHF3DalPMEljnqYfSnZbY74jey34zbkP8OrgOuNF9Op2mJdSkDjhB%2FiNChaLX845N0j8DXSQGleJIV31OqL81GGo93CPeMXGef5K5694SBN%2BKUFhB7CkdcffIaEr%2Fl1Gi9ot%2FJXk9I7egx2fPTJUhItcXbpRTJNoZTeoAgdBvEWWGKOV%2BKguYTp5TFgtbzDDvMOoXh6ntmTmUbZ7CbI%2BMvgtzT7M89y4Pc6QEWJkEQHQb22OoxZQ42SDagwhvVrqAX0IuugMM4dmNLNgsnTMMTjgXXoIcjUbwIH2PeKpUGkB%2BPJ58HkstVK6FyqfopAB%2B3NF%2FmlhAHvvCnwegJwZLln69Zknc%2BjszROsxfJu9yhmgdm8HwTpRxqfmQfwFujmsV9qF4%2FXPKlO0eZX1p%2BBGRm6MRRk087bIaeGjU67rZDjhlZ3f330lvgxPOOZqKRbq7fUmhv9kZ7IJhhilHNMnRs9hQ3699aVV%2FTKJnCn85lvOZ4l8aLZxtLQKRDauY1SwSFtLJvaKXbohkkmyTETR%2FZRsmwi581SkQlxSERpdsSEakmSYzh9cbKQgNslIuKpUMumU7DxVHD2N4Gr%2BmhS9CkTnUab2vtNzFAP00lW0STZqPNtTP4m22uAW6KBaeAnktAnWKzDXF6tfjCYg467Mglpkxfjdj3aRrjlJTHvlG47wfnbZrfVHm%2BnTeu8oZ2XlDlHdt5WZV3VENca7meX8MN05vELe4hZi%2FmbnkpkzptbpkpHzuUbrFFdoPYlLmOm8Sm7FzX6shUCjcyOfMEpkZ44DdjDmrqQjOCl9O4bDXEfHF3jctaw9JadITdbbKhMpkFc2zDiAtznBpS%2FiSYQ%2FngDWoKEDkT9qcsmjfZGQA%2FpcQ9rW662FjQtBsxNpWzYUM5G9aE0wjuIBvO4TXIRxsAy%2Bstqj7l%2B6Nz9gdTSO8fnYOxvMM2%2B%2FZbdixFMdBa2kUcOAP2%2BDGu3dHqo191fcuOKW0ylLdkILbG58kTNgTWKuX4HHkOkVBXrYjpmOUVIThV6Pu4eNTIteYMmtxscshRhz12OUSmV%2Fp2KoGa3YSsdnAVza3e1VePDV95%2Fb%2BQs5CR5S3P%2B5ruEhPPTf56bHSnw3rGHT1G3Jpc9kMUF1t6glMCaRTXWdjrJV1QaRJDXACRbhbkWgI190SgT%2BS5%2ByIixxZKUWwM6G314YZ60IMKz3MaR%2BbUXNZcB75ZjCfpbBYk4ZbxRK4BNkuGw9FDp2Qix5ZMp7pdRBh7xCtkt6OkJXyzwG5hNwlaEm12rTY5vrl7acyj03CdDnZtcLtbXpUD9Eb2ZJiTSBuHuatGTjhP8shtGZmzAycBSpzWjZweAZCzDSlzduAkQNu4I6DDNljQB5F8p15lznZuEnSzBX0QyXfqVebswEmAbragD3X3wDmGL3N24CRAt1twACINnHqVOdu5SdDNFhyASEOnXmXODpwE6GYLDmE4OXTW7WXOdk4SlCx4bte%2BeiFvqjXK%2B8M21xjl2hzVFu8bShWo7TttV%2BaE83zkmpl2EsLhioB3zhO7cUQkOUMW53LcMw8qZzfxJPidxFM4G8SDKtJ31rNlzo7iCfC7iSdxIIo6rMG9A5z%2FcNqvzNlNQAl%2BJwEVTrP9BqDCwGm%2FMmdH8QT43cSTOBvEg%2Fp74GwEypwdxRPgdxNP4mxy7xDHs077lTm7CSjB7ySgwmm23xBUGDrtV%2BbsKJ4Av5t4EmeDeNC4DJ0tVJmzo3gC%2FG7iSRxwr9UIVPX2ph1hT%2Bu3UZp7LXKrOeBxMM95KO%2BBPeRdukbDwDC3sal%2BZ40PdZHBYPqKndiYZ1KbBfNW64IWjC5wIxoOTTUpjEU8at7vRNDbRnB9R4L%2BZoL1kVLNMNv9VTbdrcrLu%2Fipgm720Z%2BM9p7U1dBqzuiwjSDedhA02LlIEndG6%2Ba%2B3mBKa%2BVX3FBh6UCXSq8c6d65uKXCTvfPnVsnSKbXUXJxVnXEnN0lXK%2Bc0KXeDY3BccNyk8rIiyyIkpG54K1oiCVv7MwicH1Fu7a2J6SpFMJ%2Fu%2BxalosvUmNt%2B7KZwcprv0NaJjcuhxNb9vg0SvgbTsPYNCueInh5n%2Fcp3mNZjXQ7jC%2FndHmfAO7Qelu6KJ7jpW8veZ4HF3TPoUzu7cnbLyV7n17Qcq%2BgLEU5VzemZjxP42u80p3%2FRrej6qvP1SIhkMTdLnjn6lvxat53J%2FZ3EqdexmfpNTcvMdyjBcuMZN%2FriKtftQVU85QECtJCWUm5lkNT7aISaH0O%2BaB6l8tuFgO0J124aAuN23kooyeEAy1xnyB0q8wLeq2j0cYlu9KfYnID5X4XJcXxU9yNLGmHVYjqqmpbyfFS4I7YSX2uXS4MyFkE4xDT%2B64bhpEFEsG50XOxmdzYM9KoiPu%2B4C%2FmzknMg0zFTBlKxqGiKqbKaDzUrpS5LZ%2BUSLU7MneWR9x3qejkZeHDdUzLc%2B%2F76r6a%2Bv%2B9Xq8qm%2BeNWzCwEiqFwAty36b95aBPlzJsKPxGyR%2Bx99gPPD63qwAcQ3vDERvgONdkTPftQj308uwdVo6%2B792ZJc4RulkORszzjzuC93A7c8%2F3vLvzx7HDgO4X8prd8GX%2F94eDZiM7rAxtzPNlgToePr6rfsePG1kd4wrAEbD0af9LvfIbsT36NAk2pklaQC2ySEKq8F3i8esXyQ%2F4%2FYMCWqVpdHF4dldZH%2FsddgTuwOESPRlGw8bZx3E85B3Cw%2BFQy%2FXoH%2F7QUB8fjnB%2Bq4QZNvjCG2IAHhHxQ0W40WSP%2Fbp38iLI0AA8S4L4VRpjSB4%2BvbPuQkYRhn6zAH1dAFHJ1Auh6gpsBKPi4oTU420TQN3jTmi3gQxQ41MjW3tGkDaxe0SToMAdWyFVqTndnNFh43pnaCJbzqBH79ligutEgeyMswM2lo%2Blk6HyLpBY30wZd1hggapdM5pKKJ247Rj40oXB4FhoSsKcUcPyNsjAmIaIUiTVmytb1XwxhwaoamHoVmABRcGGD2ZmtaWc%2BsLlMYsRHXvqqK3ZfbWVul%2Fuhu7bVzmJTpy4zV27Qh5vN9HkoOverRt9RAzYQJoetw6Ftja8BPtB3rMuikhvHMHYHDOqZlIXHuz8ml%2BBMQptP2ntKB1UgeYeuuq8qb3ShIMz3%2F4MiOyc7d6mW%2Fjl1ki9C626K3afUoqcVAqJ7ry4d34kg4LSb21caW9np0vgRYAHptbJm5%2BECDnuq9K49HC4tQ0ERl0GiNStFTq53GrPJHA9MnaQ9tbumOmxpnXOTO%2FXemo02KxtmjcObdohZ%2BwJ%2FKRoO6ui7bj%2FyeF29gXD7Xtz76QWcMauyjuFnMSkLZXkRp2JM%2Bx0Xo2BZwI1hd64gdcOwbej3H%2BlAJSf2IhwB%2BSPL56JT2d8ZpWHOxwHX67a%2B2LmcCle%2B7bI5%2BsOA6T%2FFLqXX0r5TJWPaID2N64ydAu%2FtM6fXtX%2BRd2sfevmM5V%2B5G91NAxN0DRHQ%2Fvtr%2BHsL6v5Fnf%2FbWguXK7mwJu%2BrqLyNe4bqL178z20DOqzc1LCmkUX%2BRiMoeszwVMyNJTFGf6erlPem2JXvCWOGGXVhCeeffGP2%2By%2BuHihtBaOI4DDlnGDPomGswH2NJp33tYb77sT8O9CoI4%2B%2BFz%2BQ53ArcNj8rtVcXqDt8UseDJZddhldHGpveJlMlGxCHnNhzD8pCP24uwebWbHQ01L8hIdeoUU8ZFBSNWg2gLsZFshO3IXIUvNxxUhmkqmbwlWV%2F7QLRhTMVqezS1dh%2F3e8aPD4%2BNDKHz%2BUc8%2FPvIG2pQ8bQWucC3LHHu9R4feI9w45h%2F6vcNHvn90VCETolCfvtaDe%2BblYeA4vfBbkL9P31DE%2B5YeH%2BEKo3Zj7FRdUuDEjXXco6FlJ%2BEWIXPpPlHR2Lo9nc2NUkOo9q2sBGYYVfvgFWJ8i7J4j5xIrUpqBN3HaxtQ14Ev1X7IWrgvmsDm6Q1C4UoYauZtYugPnPw2s8Mf36b6KVLjdRBd5g%2BP7AKmIk6TRriQSLfJb4eWw%2BZBFhV4IF6g%2FRvzDafI7CeWW7rd2PBfJYBkLv4%2BeaLZUSQdnOpBs4GFAP%2FjFPR%2BdHRc50QFjr7GCdH8DfMPD82y6Iss4skw4p%2BANMcC0iq2g3OSGOGU3E2gw3PUQECZTGldij6hROEKf76FQsWigwNDLaKCZ3gj%2BvQrKUFvdQ2%2FTsOb8%2BKn58%2FEF%2FGSWsX68y8fXr97%2Bf1Pz5u7h3bvwuyADLEx2LHz4Gh4oA9SirBx1aiukqGNmDTkIX0bEKPIw1MLiUsu3SAGmpMXfn1tC7dvTtn%2FaQl%2B7A%2FBeAguTpzj5rtxx1nv33fmbk2w1sxBUn2OUOaspVosLgXD0vCRYhyXykXHqSMn0KACPBWf8zMqg%2FvGJgj8r%2Bl%2Bbdki1%2BbLW3ZIKc54UsxRStQSs90nuORLufWeoGhHCZ7gpi4GPjgPlAul58Hkdy7OsRiHjkeuU9DCPpJdW5uoUZdmKQUMs9CNUkeDkTkppTGGgiPeOsZBt5HjoKspQUc%2FIjOqH4OzocX5lZFxaqZRJ%2FzP%2FvjuraXVYDCyUobHO%2BlJx6lH%2BjluW1Z9dmzkOGZtw5unhkfOk8w1HnVrO8%2FtbrD6T3TU1HnIbwPWa3GA1X3gzMZTB3xG1jGjjZ7DEqqNgBxbPppcE1Sh5Agh%2FRjNyHGwpxm%2BPM1SQ6sO29jY1ez8qHYpx0b1bzfaYnhcs0XDKRnXMRuT8YmLjrF33t50vwN%2BNqfvM2%2Ff%2FGfsqNP30l33gEa77SYffgHyYTN5sGKd%2FKatpoJyQJTfB71lD7JxoXOlHtb4cN7A7qq8sYeZn2BpgQnoRIUKpF5139HJbkVBl1K71Y7I1rQaCV7W1kJcRA9REHTqrcr%2BJYugQaWZpJF1j561ikqITWo4yFX6W4T127nKR6BQvXRo3%2BAZYhr7Hncvao0Nxq3edRD27VWl%2B7se3nliFEqx1prxCY%2Bu9WJfw3Ws6Wo89Gbkux4tmDSzMRoYB4Gm5WOFT70FWqqR2HYnrK6OpofVTQyjfB5Ar0LQw%2B7Q2SIv0pl4N9cfGxZfG9gbahr63U0EaxWqcUHOEMPeoSCPfZu7FOTmBSnNDhsUnBOOzW6p0OWKnXK21ur3qlW7DUCrXYDGuwAFuwDhVQ%2B7wGW7AK13gsJbH3ZiWV4zcXKXIFKftjcCSFbHW0JHHUH%2FG4ydxXwXk%2BEdKLvAxeq%2Bgl1csAsg3SiyE%2Bed4mgnKHk7yK76%2FoUi6U%2B4oB7EZ%2BUNXH%2FFePoqSuK%2FXba3RUnIl%2FX9%2FjwU%2BmOH8eE%2B%2B%2FcPH169e%2F38wwe2%2F1DeTD5vVVeSC9W12%2BAw8YKrvU84X994YCAp95PlPRLml6llSrrqlj0xJ57lboTENLciRLfKmVQkgoKQW%2FDUNHIVGUEYPlP73LacdYhwPk1T0%2BKIQGnMcaK49euPYIXStiP2Pz9G4S382j07Y8qiDvBzMOO3v2oMDF%2FRVsEo7JgrdEI6JVvbUlfsj%2FlaGkOIfXWlRYUCeuuqJcF1dIHD5R5EumMnjaQCxUlq%2FLGc9dK1LoPB3EDa3olHpTywaWCgm9%2FFI0wnixmetaiTf%2FbLS6y%2BMC0NQh5WurhO5VDU49dlRGyYspcezcutkgqjvMixMTLUvKTbVuVupNuqupBWKbeqNootJq7ktRWgfZhmLyCOvGH%2FqDoEX2Qre478vZDgvEHdTN%2BZCY5RbLR9U2Km067om%2Bc6t5gARsU0Uchxw7s1pY8FhtJFbi%2BBcO8w8TyTB4PcjZhRwDcVXpzx%2FE1ZW1sMpxM2VmF0Xf5b4ULVX%2FXfa1qWy3BNRB9b%2B3nrBZ0g9%2BTF9qz1ur1n2N8hiZw9M0SxV7TJnQK3Sa1aj8DdoAtHC0xzc7GRs2m7QzN8fQtZM2y5%2Fchs3wSMVhPKjsC3eQE9iCdW6IjpTmyBVT0zgZF8wZ%2FHfCbGegSwJ5gYSD3qLgmXsb2Mx0EB%2FRz8UEeeZt15GiV45pdWN3nYnYXssnvE5nF3wOZZ12cF9LO62OETTxdZsOoe9vtsCoLko3RRxFHCu0macJqc6Hosn40IdJnjYyw%2Btww0xxcC2%2Bv39xxiRvCSvQVEFFNODO%2FZRSgSfVDuhIlyEWhnquUBqGkAoV5C4KyN%2BP6MPH8L%2FcEpnlVIJvpnDehTDGWHV2yUl%2F4dCYod8To2X8UFfHqKuPpPT8nMV7x10Hi38pfm68p8XStos775TQbyqzSP5HHO99V6o%2BhNAEByoSK%2BDhDlZ0FMM9kOM0azxXOKbUdW%2FjSO0xsevk2lGwyQSZrxnvASlIuqKgyyixzq0uRarw0NNqJkUbDOoQjhehoi0TlixNNKUnk4%2BBJKacwlO%2ByVt0SP3LhN%2Fb6uqtFxrZnoZ7r%2BWBLp2esFverOtHaHbYFVd6q1qwVey%2BTaN5ut5uxWb3rlB3c2xrPxpR%2BC7NpF4QmeeTQ%2FTmEUFA25FApbK1FMXuGdx1Y0KAgVjC%2Bh%2F1SH0M6g4unR6ugpvOUtvRCap07Jc3o2Hj49x8%2FnSovrA1bKa9dkNSzMWJ3aaSOxesdC6KDc%2Bst0mtN89a5hAB6xAu59bdtlFV%2B7ktci0sFA23%2BA5hRfOBjnLVOJNu4n6Xl4BWoJYUsiYewegOF3w9ql2eyqSmz8sumfNILTtpWuKbGhVVWJGNLlPAMkiLIs4XEvSnvTKOOtPVFX4OC9AmVsz1hG2BupGKXNcHlp%2FfqKQ7tjkCnXHDaTKMFoEaeicNthe1Br7jXMqBvhbSj7qYVMp6uVi9ri3DZjous7yNpe1rGXI9yHwQ0tjbC6k0vt2AFrUlGp21N03%2BtdjzNxsBsce003dNIJa%2FHWcoyNZOtiN4htszaf6Bd1czkuycV%2BDHMALWOlrNM3dncMr8sONDje5qP38x30jEIrzU9dW32I%2B7QoYOCJ3gDqUMNoKM298Lv1q3fqWTuBtA3hbjC5ffYIzwnTT7%2BnbVWTQPVRvTbRVx51klMGjd2OGlmnGU2zy5AU31I5M3vB6gsoHearOyjKvk8Dgh6bdYdD82l3tPEqh70SYs8cEzd0yQHuxIJydPIt%2FAaMvFjBuHscTH6%2FoDEKsvnX8Hg6DY%2FLz7VV49n7d9ZpN42%2Brj57J3a9Y%2BI4psVirLicE0nOHrgWUG4zNR0bEGDmd37MGSKI7ISm5ZuGpmF0XY1LBbSw249vX%2F4EeL9%2Bm8%2BCOH6CLRenweikHNt%2F%2B1Dk%2FWrhB3OoS8KzyygOW4atbEbG4Hca8yXDn%2B4kjdlFMO%2BuYIQL49KbywjcrY2B88sgTG%2FgSbjmoi%2FPKGK93Sqpt%2FXMFHBzEHtlXk0zwb54XDYTDY2JMfU2%2FYd79%2B7l%2FwQ%2FrxdQJ%2BID7sp781%2Fh4RfarGpB%2FDM8PIvyeRys3vwjPPN89v8BSeiR3Q%3D%3D<\/code><\/pre>\n<p><strong>\u041d\u0438\u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/strong>. \u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u0436\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439  \u0431\u0430\u043d\u0434\u043b Javascript, \u0438 \u0432\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 DOM \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043e \u0432\u0441\u0435\u0439 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/582\/b6b\/385\/582b6b385d8ceaa21713759383f05098.png\" width=\"1004\" height=\"75\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/582\/b6b\/385\/582b6b385d8ceaa21713759383f05098.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/582\/b6b\/385\/582b6b385d8ceaa21713759383f05098.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u043c\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f 1 \u0440\u0430\u0437 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438<\/p>\n<pre><code class=\"1c\">EventHandler[\"JoyCon\", {   \"zr\" -&gt; (FrontSubmit[FrontSlidesSelected[\"navigateNext\", 1]]&amp;),   \"y\" -&gt; (FrontSubmit[FrontSlidesSelected[\"navigatePrev\", 1]]&amp;) }];<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443 \u0441\u043e \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4da\/858\/fe1\/4da858fe11470e70bd7af14444c9ab92.gif\" alt=\"\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0448\u0430\u0433 \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 JoyCon\" title=\"\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0448\u0430\u0433 \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 JoyCon\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4da\/858\/fe1\/4da858fe11470e70bd7af14444c9ab92.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4da\/858\/fe1\/4da858fe11470e70bd7af14444c9ab92.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0448\u0430\u0433 \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 JoyCon<\/figcaption><\/div>\n<\/figure>\n<h4>\u0410\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a \ud83d\udd79\ufe0f<\/h4>\n<p>\u0421\u0442\u0438\u043a \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0414\u043b\u044f DPG Spring Meetings \u0443 \u043c\u0435\u043d\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u044b\u043b\u0430 \u0438\u0434\u0435\u044f \u0436\u0438\u0432\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 <strong>\u043c\ud835\udcb6\ud835\udc54\ud835\udcbe\u0447\ud835\udc52\ud835\udcc8\u043a\ud835\udcbe\ud835\udc52 \ud835\udcc8\ud835\udcc1\ud835\udcf8\ud835\udccb\ud835\udcb6 \ud835\udcbe\ud835\udccf \ud835\udc5c\ud835\udcb7\ud835\udcc1\ud835\udcb6\ud835\udcc8\ud835\udcc9\ud835\udcbe \ud835\udcbb\ud835\udcbe\ud835\udccf\ud835\udcbe\ud835\udcc0\ud835\udcbe<\/strong>. \u042f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u043d\u0435\u0435 \u0438 \u0434\u043e\u0445\u043e\u0434\u0447\u0438\u0432\u0435\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0436\u0438\u0432\u0443\u044e <em>\u043d\u0430 \u0441\u0446\u0435\u043d\u0435<\/em>.<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430:<\/p>\n<pre><code class=\"haskell\">FaradayWidget := ManipulatePlot[  Abs[(E^(I w (-1 + Sqrt[1 + (f\/((-I g - w) w + (d - w0)^2))])) + E^(I w (-1 + Sqrt[1 + (f\/((-I g - w) w + (d + w0)^2))]))) \/. {g -&gt; 0.694, w0 -&gt; 50.0}]  , {w, 20, 80}, {{f,2},0,100,1}, {{d,0},0,10,1} , FrameLabel-&gt;{\"wavenumber\", \"transmission\"} , Frame-&gt;True ];  FaradayWidget<\/code><\/pre>\n<blockquote>\n<p>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0432\u0435\u0440\u0441\u0438\u044f \u044d\u0442\u043e\u0433\u043e <a href=\"https:\/\/jerryi.github.io\/wljs-demo\/THzFaraday.html\" rel=\"noopener noreferrer nofollow\">\u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043b\u0435\u0436\u0438\u0442 \u0437\u0434\u0435\u0441\u044c<\/a><\/p>\n<\/blockquote>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/55e\/b51\/c68\/55eb51c68d45b9dbf4858e3a379fb8bb.gif\" alt=\"\u0414\u0435\u043c\u043e\" title=\"\u0414\u0435\u043c\u043e\" width=\"800\" height=\"373\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/55e\/b51\/c68\/55eb51c68d45b9dbf4858e3a379fb8bb.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/55e\/b51\/c68\/55eb51c68d45b9dbf4858e3a379fb8bb.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043c\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0441\u043b\u0430\u0439\u0434, \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0435\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u0430\u043a \u0442\u0435\u0433 (aka JSX)<\/p>\n<pre><code class=\"markdown\">.slide  # Faraday Widget Here it is in action  &lt;FaradayWidget\/&gt;<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u0442\u0438\u043a\u0443<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f6\/005\/296\/7f600529687092d42bef37933a5336a6.png\" alt=\"\u041d\u0430\u0448 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a\" title=\"\u041d\u0430\u0448 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a\" width=\"1664\" height=\"1292\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7f6\/005\/296\/7f600529687092d42bef37933a5336a6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f6\/005\/296\/7f600529687092d42bef37933a5336a6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0448 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u0441\u0442 \u0438 \u043f\u0440\u0438\u0432\u044f\u0436\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a \u0434\u0438\u0441\u043a\u0443 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435<\/p>\n<pre><code class=\"haskell\">pos = {0.,0.}; EventHandler[\"JoyCon\", {\"Stick\" -&gt; ((pos = #)&amp;)}];  Graphics[{   Circle[{0,0}, 2.],   Disk[pos \/\/ Offload, 0.1] }]<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae9\/c77\/afe\/ae9c77afeae80c74013d5d63e5b04af7.gif\" alt=\"\u0422\u0435\u0441\u0442 run\" title=\"\u0422\u0435\u0441\u0442 run\" width=\"800\" height=\"446\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae9\/c77\/afe\/ae9c77afeae80c74013d5d63e5b04af7.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae9\/c77\/afe\/ae9c77afeae80c74013d5d63e5b04af7.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0435\u0441\u0442 run<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0443\u0436 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0440\u0435\u0437\u043a\u0438\u0435. \u0414\u0430 \u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043c\u0430\u043b\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e. \u0420\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f<em>!<\/em><\/p>\n<pre><code class=\"haskell\">EventHandler[\"JoyCon\", {\"Stick\" -&gt; ((pos += 0.1 #)&amp;)}];<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b88\/03f\/c6e\/b8803fc6e73b44c81d523b3f0a185ea0.gif\" alt=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\" title=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\" width=\"800\" height=\"446\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b88\/03f\/c6e\/b8803fc6e73b44c81d523b3f0a185ea0.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b88\/03f\/c6e\/b8803fc6e73b44c81d523b3f0a185ea0.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u044f\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>pos<\/code> \u043a \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430<\/p>\n<pre><code class=\"haskell\">FaradayWidget := ManipulatePlot[  Abs[(E^(I w (-1 + Sqrt[1 + (f\/((-I g - w) w + (d - w0)^2))])) + E^(I w (-1 + Sqrt[1 + (f\/((-I g - w) w + (d + w0)^2))]))) \/. {g -&gt; 0.694, w0 -&gt; 50.0}]  , {w, 20, 80}, {{f,2},0,100,1}, {{d,0},0,10,1} , FrameLabel-&gt;{\"wavenumber\", \"transmission\"} , Frame-&gt;True , \"TrackedExpression\" -&gt; Offload[5 pos] (* &lt;-- *) ];<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u043e\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0436\u0438\u0432\u0443\u044e \u043d\u0430 \u0441\u043b\u0430\u0439\u0434\u0435<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e91\/3d3\/453\/e913d3453286379c21740e81c48c67d0.gif\" alt=\"\u0414\u0435\u043c\u043e\" title=\"\u0414\u0435\u043c\u043e\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e91\/3d3\/453\/e913d3453286379c21740e81c48c67d0.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e91\/3d3\/453\/e913d3453286379c21740e81c48c67d0.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043c\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0432\u043e\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 DPG<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ac\/36f\/c59\/8ac36fc59828c16b144c9993a9df487a.gif\" alt=\"\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043c\u043e\" title=\"\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043c\u043e\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ac\/36f\/c59\/8ac36fc59828c16b144c9993a9df487a.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ac\/36f\/c59\/8ac36fc59828c16b144c9993a9df487a.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u043c\u043e<\/figcaption><\/div>\n<\/figure>\n<h3>\u041c\u0438\u043d\u0443\u0442\u043a\u0430 \u043e\u0442\u0434\u044b\u0445\u0430<\/h3>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443 DPG \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u0411\u0435\u0440\u043b\u0438\u043d\u0435, \u0430 \u0432 \u044d\u0442\u043e\u043c \u2014 \u0432 \u0420\u0435\u0433\u0435\u043d\u0441\u0431\u0443\u0440\u0433\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 23 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044e \u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e \u043f\u043b\u043e\u0449\u0430\u0434\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0443\u044e\u0442\u043d\u044b\u0435 \u0437\u0435\u043c\u043b\u0438 \u0411\u0430\u0432\u0430\u0440\u0438\u0438 \u043c\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u0438 \u0431\u043b\u0438\u0436\u0435 \u043f\u043e \u0434\u0443\u0448\u0435<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bee\/652\/a58\/bee652a58bb42109d8933dc96cd123b0.jpg\" alt=\"\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u043c\u0438\u043b\u044b\u0439 \u0438 \u0443\u044e\u0442\u043d\u044b\u0439 \u0433\u043e\u0440\u043e\u0434\u043e\u043a \u043d\u0430 \u0441\u043b\u0438\u044f\u043d\u0438\u0438 \u0440\u0435\u043a \u0414\u0443\u043d\u0430\u044f \u0438 \u0420\u0435\u0433\u0435\u043d\u0430\" title=\"\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u043c\u0438\u043b\u044b\u0439 \u0438 \u0443\u044e\u0442\u043d\u044b\u0439 \u0433\u043e\u0440\u043e\u0434\u043e\u043a \u043d\u0430 \u0441\u043b\u0438\u044f\u043d\u0438\u0438 \u0440\u0435\u043a \u0414\u0443\u043d\u0430\u044f \u0438 \u0420\u0435\u0433\u0435\u043d\u0430\" width=\"1440\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bee\/652\/a58\/bee652a58bb42109d8933dc96cd123b0.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bee\/652\/a58\/bee652a58bb42109d8933dc96cd123b0.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u043c\u0438\u043b\u044b\u0439 \u0438 \u0443\u044e\u0442\u043d\u044b\u0439 \u0433\u043e\u0440\u043e\u0434\u043e\u043a \u043d\u0430 \u0441\u043b\u0438\u044f\u043d\u0438\u0438 \u0440\u0435\u043a \u0414\u0443\u043d\u0430\u044f \u0438 \u0420\u0435\u0433\u0435\u043d\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u044d\u0442\u043e &#8212; \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442. \u041a\u043e\u043d\u0434\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043b\u044c 60-\u0445 \ud83d\udcaa\ud83c\udffb<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/87e\/a6b\/fae\/87ea6bfae939f075298032852eb76e43.jpg\" alt=\"\u041c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 DPG\" title=\"\u041c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 DPG\" width=\"1440\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/87e\/a6b\/fae\/87ea6bfae939f075298032852eb76e43.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/87e\/a6b\/fae\/87ea6bfae939f075298032852eb76e43.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 DPG<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u0447\u0430\u0448\u043a\u0430 &#8212; &#171;C\u044a\u0435\u0448\u044c \u043c\u0435\u043d\u044f \u0437\u0430 40 \u043c\u0438\u043d\u0443\u0442&#187;<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9aa\/ab5\/967\/9aaab59674d6bb8950b8697ac5eff7da.jpg\" alt=\"Vegan, healthy, eco-friendly. \u041d\u041e \u0442\u043e\u043b\u044c\u043a\u043e 40 \u043c\u0438\u043d\u0443\u0442\" title=\"Vegan, healthy, eco-friendly. \u041d\u041e \u0442\u043e\u043b\u044c\u043a\u043e 40 \u043c\u0438\u043d\u0443\u0442\" width=\"1440\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9aa\/ab5\/967\/9aaab59674d6bb8950b8697ac5eff7da.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9aa\/ab5\/967\/9aaab59674d6bb8950b8697ac5eff7da.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Vegan, healthy, eco-friendly. \u041d\u041e \u0442\u043e\u043b\u044c\u043a\u043e 40 \u043c\u0438\u043d\u0443\u0442<\/figcaption><\/div>\n<\/figure>\n<p>\u0411\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u043a\u0443\u0441 \u0432\u0430\u0444\u043b\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u043d\u0430\u043f\u0438\u0442\u043a\u0435! \u0422\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432\u0437\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u0433\u0440\u044b\u0437\u0442\u044c \u0435\u0451, \u043f\u043e\u043a\u0430 \u0432 \u043d\u0435\u0439 \u0433\u043e\u0440\u044f\u0447\u0438\u0439 \u0447\u0430\u0439.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0437\u0430\u0431\u043e\u043b\u0435\u043b \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u0435\u043d\u044c \u0438 \u0443\u0435\u0445\u0430\u043b \u0434\u043e\u043c\u043e\u0439 \u0432 \u0410\u0443\u0433\u0441\u0431\u0443\u0440\u0433. \u0418 \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 6 \u0434\u043d\u0435\u0439 \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 &#8212; \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bc7\/186\/92f\/bc718692fe51cab9d6fcdae17c9ddd92.jpg\" width=\"1440\" height=\"1080\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/bc7\/186\/92f\/bc718692fe51cab9d6fcdae17c9ddd92.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bc7\/186\/92f\/bc718692fe51cab9d6fcdae17c9ddd92.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0438\u043c \u0431\u0430\u0440\u0430\u043d\u0430\u043c.<\/p>\n<h3>IMU \u0438\u043b\u0438 \u0441\u0432\u044f\u0437\u043a\u0430 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f-\u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 \ud83c\udf10<\/h3>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044f \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>details<\/code>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e<\/p>\n<ul>\n<li>\n<p><code>x,y,z<\/code> \u0434\u043b\u044f \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><code>rps<\/code> (<strong>radians per second<\/strong>) \u0434\u043b\u044f \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u0430<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">\/\/.. \/\/.... const buttonStates = {   a: false, b: false, home: false, plus: false, r: false, sl: false, sr: false,   x: false, y: false, zr: false };  const joystickPosition = [0.0, 0.0]; let restingJoystick = [0.0, 0.0]; let isCalibrated = false; let imuEnabled = false;  \/\/ Enable IMU mode if allowed core.JoyConIMU = async (args, env) =&gt; {   imuEnabled = await interpretate(args[0], env); };  \/\/ Function to handle Joy-Con input function handleJoyConInput(detail) {   if (!isCalibrated) {     restingJoystick = [Number(detail.analogStickRight.horizontal), Number(detail.analogStickRight.vertical)];     isCalibrated = true;     return;   }    const currentTime = performance.now();   if (currentTime - lastUpdateTime &gt; 50) { \/\/ Update every 50ms     lastUpdateTime = currentTime;      let buttonPressed = false;     let joystickMoved = false;      for (const key of Object.keys(buttonStates)) {       if (!buttonStates[key] &amp;&amp; detail.buttonStatus[key]) buttonPressed = true;       buttonStates[key] = detail.buttonStatus[key];     }      const verticalOffset = Number(detail.analogStickRight.vertical) - restingJoystick[1];     const horizontalOffset = Number(detail.analogStickRight.horizontal) - restingJoystick[0];      if (Math.abs(verticalOffset) &gt; 0.1 || Math.abs(horizontalOffset) &gt; 0.1) {       joystickMoved = true;     }      joystickPosition[0] = horizontalOffset;     joystickPosition[1] = -verticalOffset;      if (imuEnabled) {       server.kernel.io.fire('JoyCon', {         'Accelerometer': Object.values(detail.actualAccelerometer),         'Gyroscope': Object.values(detail.actualGyroscope.dps)       }, 'IMU');     }      if (buttonPressed) {       for (const key of Object.keys(buttonStates)) {         if (buttonStates[key]) {           server.kernel.io.fire('JoyCon', true, key);           break;         }       }     }      if (joystickMoved) {       server.kernel.io.fire('JoyCon', joystickPosition, 'Stick');     }   } } \/\/.... \/\/..<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a IMU \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430, \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430 \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>JoyConIMU[True | False]<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f IMU.<\/p>\n<p>JoyCon, \u043a\u0430\u043a \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 IMU (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u0447\u0430\u0441\u044b, \u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0448\u043b\u0435\u043c\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043a\u0432\u0430\u0434\u0440\u043e\u043a\u043e\u043f\u0442\u0435\u0440\u044b), \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f<\/p>\n<ul>\n<li>\n<p><strong>3\u0445 \u043e\u0441\u0435\u0432\u043e\u0439 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f<\/strong> &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u043c \u0443\u0433\u043b\u043e\u0432\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432 <strong>\u0440\u0430\u0434\/\u0441\u0435\u043a<\/strong> \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u043e\u0441\u0435\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"(\\omega_x, \\omega_y, \\omega_z)\" alt=\"(\\omega_x, \\omega_y, \\omega_z)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/01b\/747\/ee7\/01b747ee7b5472190d887d225ee24520.svg\" width=\"96\" height=\"23\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/01b\/747\/ee7\/01b747ee7b5472190d887d225ee24520.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/01b\/747\/ee7\/01b747ee7b5472190d887d225ee24520.svg 781w\" loading=\"lazy\" decode=\"async\"\/>;<\/p>\n<\/li>\n<li>\n<p><strong>3\u0445 \u043e\u0441\u0435\u0432\u043e\u0439 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440<\/strong> &#8212; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 1 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"(a_x, a_y, a_z)\" alt=\"(a_x, a_y, a_z)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aac\/f18\/bcd\/aacf18bcdc2562d84dcf19dc47ee4e72.svg\" width=\"91\" height=\"23\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aac\/f18\/bcd\/aacf18bcdc2562d84dcf19dc47ee4e72.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aac\/f18\/bcd\/aacf18bcdc2562d84dcf19dc47ee4e72.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043e\u0434\u043d\u0438\u043c \u043b\u0438\u0448\u044c \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c \u0438\u043b\u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u043e\u043c? \u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0432\u0441\u0435 \u043e\u0431\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 IMU<\/p>\n<pre><code class=\"dart\">JoyConIMU[True] \/\/ FrontSubmit;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/p>\n<pre><code class=\"dart\">prevTime = AbsoluteTime[]; angles = {0,0,0}; acceleration = {0,0,-1};  process[imu_] := With[{time = AbsoluteTime[]},   With[{dt = time - prevTime},     angles = (angles + {-1,1,1} imu[\"Gyroscope\"][[{3,1,2}]] dt);     acceleration = imu[\"Accelerometer\"];     prevTime = time;   ] ]<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 <code>acceleration<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u0430 \u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u043a<\/p>\n<ul>\n<li>\n<p>\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0443\u0433\u043b\u043e\u0432\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c JoyCon) \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u0443\u0433\u043b\u043e\u0432\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 \u0441\u0430\u043c\u0438 \u0443\u0433\u043b\u044b<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c<\/p>\n<ol>\n<li>\n<p><strong>\u0422\u0440\u0438 \u0443\u0433\u043b\u0430<\/strong>, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e JoyCon <code>angles<\/code><\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0434\u0438\u043d \u0432\u0435\u043a\u0442\u043e\u0440 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f <\/strong>(\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u043e\u043a\u043e\u044f &#8212; \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438) <code>acceleration<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0435 \u0442\u0440\u0438 \u0443\u0433\u043b\u0430 \u0435\u0449\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b (\u0442\u0435\u043d\u0437\u043e\u0440\u0430)<\/p>\n<pre><code class=\"dart\">RollPitchYawMatrix[{\\[Alpha], \\[Beta], \\[Gamma]}] \/\/ MatrixForm <\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39d\/53c\/80a\/39d53c80a102bdcd8ff017da1f4f519e.png\" alt=\"\u0422\u0435\u043d\u0437\u043e\u0440 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430\" title=\"\u0422\u0435\u043d\u0437\u043e\u0440 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430\" width=\"1019\" height=\"116\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/39d\/53c\/80a\/39d53c80a102bdcd8ff017da1f4f519e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39d\/53c\/80a\/39d53c80a102bdcd8ff017da1f4f519e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0435\u043d\u0437\u043e\u0440 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u043e\u0433\u0434\u0430, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u044d\u0442\u0438\u043c \u0443\u0433\u043b\u0430\u043c. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430 JoyCon \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e09\/ca0\/b03\/e09ca0b03dbb25bc13514010e9c830fe.png\" alt=\"\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.\" title=\"\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.\" width=\"849\" height=\"713\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e09\/ca0\/b03\/e09ca0b03dbb25bc13514010e9c830fe.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e09\/ca0\/b03\/e09ca0b03dbb25bc13514010e9c830fe.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0430\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u0443\u044e, \u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f IMU \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0451\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <code>angles = {0., 0., 0}<\/code>.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"dart\">EventHandler[\"JoyCon\", {   \"IMU\" -&gt; Function[val,      process[val];   ] }];  angles = {0,0,0}; (* \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 *)  Refresh[acceleration, 0.25] (* \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c *) Refresh[angles, 0.25] (* \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c *)<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/633\/235\/46b\/63323546bac1938e9b4a73a6d54f6b8b.gif\" alt=\"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434\" title=\"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434\" width=\"800\" height=\"85\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/633\/235\/46b\/63323546bac1938e9b4a73a6d54f6b8b.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/633\/235\/46b\/63323546bac1938e9b4a73a6d54f6b8b.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u044b<\/p>\n<pre><code class=\"dart\">axis = Table[{{0.,0.,0.}, Table[1.0 KroneckerDelta[i, j], {i,3}]}, {j,3}];  EventHandler[\"JoyCon\", {   \"IMU\" -&gt; Function[val,      process[val];     axis[[1]] = {{0.,0.,0.}, RollPitchYawMatrix[angles].{0,1.0,0.0}};     axis[[2]] = {{0.,0.,0.}, RollPitchYawMatrix[angles].{-1.0,0.0,0}};     axis[[3]] = {{0.,0.,0.}, -Normalize[acceleration][[{2,1,3}]]};     axis = axis;   ] }];<\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0438\u0445 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043d\u0443\u0441\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0443\u0433\u043b\u043e\u0432. \u041f\u043e \u0446\u0432\u0435\u0442\u0430\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c:<\/p>\n<ol>\n<li>\n<p><strong>\u0421\u0438\u043d\u0438\u0439 \u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u0439<\/strong> &#8212; \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u0430<\/p>\n<\/li>\n<li>\n<p><strong>\u0417\u0435\u043b\u0435\u043d\u044b\u0439<\/strong> &#8212; \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"haskell\">{   {Opacity[0.2], Sphere[]},    Red, Tube[axis[[1]]\/\/Offload, {0.2, 0.01}],   Blue, Tube[axis[[2]]\/\/Offload, {0.2, 0.01}],   Green, Tube[axis[[3]]\/\/Offload, {0.2, 0.01}] } \/\/ Graphics3D  EventHandler[InputButton[\"Reset\"], Function[Null, angles *= .0]] <\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3fa\/4b8\/ad4\/3fa4b8ad40ffd28604a0e9ab91268601.gif\" alt=\"\u0414\u0435\u043c\u043e\" title=\"\u0414\u0435\u043c\u043e\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3fa\/4b8\/ad4\/3fa4b8ad40ffd28604a0e9ab91268601.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3fa\/4b8\/ad4\/3fa4b8ad40ffd28604a0e9ab91268601.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043c\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u201c\u043d\u0443\u0436\u043d\u0443\u044e\u201d \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u0438\u043d\u0438\u0439 \u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0443\u0433\u043b\u0430\u043c \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u0430, \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0434\u0440\u0438\u0444\u0442<\/strong>-\u043e\u043c.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u041e\u0431\u0449\u0430\u044f \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u044d\u0442\u0438\u0445 \u0443\u0433\u043b\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 (\u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440). \u0412\u0435\u0434\u044c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0442, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0438\u0437!<\/p>\n<blockquote>\n<p>&#8212; \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043f\u0440\u0438\u0434\u0430\u0434\u0438\u0442\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u0438\u0442\u0441\u044f \u0441 \u0432\u0430\u0448\u0438\u043c, \u0438 \u0432\u0435\u043a\u0442\u043e\u0440 \u0443\u0431\u0435\u0436\u0438\u0442 \u0432\u0431\u043e\u043a.<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u0433\u043e\u043b, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u0438\u0434\u0438\u043c\u043e, \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 JoyCon \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u043a\u0430\u043a, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u043b\u044f \u043a\u0432\u0430\u0434\u0440\u043e\u043a\u043e\u043f\u0442\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u0448\u043b\u0435\u043c\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0430\u0433\u043d\u0438\u0442\u043e\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0439 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043e\u0442 <a href=\"https:\/\/www.youtube.com\/@james.lambert\" rel=\"noopener noreferrer nofollow\"><strong>James Lambert<\/strong><\/a>, \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0435\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0433\u0434\u0435<strong> <\/strong><a href=\"https:\/\/www.youtube.com\/watch?v=ha3fDU-1wHk\" rel=\"noopener noreferrer nofollow\"><strong>\u043e\u043d \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <\/strong>Oculus DK1<\/a>.<\/p>\n<h4>\u041d\u0430 \u043a\u043e\u0439 \u043d\u0430\u043c \u044d\u0442\u043e \u0432 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438?<\/h4>\n<p>\u042d\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u044f \u0437\u0430\u0434\u0430\u043b\u0441\u044f, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432, \u043a\u0430\u043a \u0433\u043b\u0443\u0431\u043e\u043a\u0430 \u043a\u0440\u043e\u043b\u0438\u0447\u044c\u044f \u043d\u043e\u0440\u0430. \u0412 \u043c\u043e\u0435\u043c \u0434\u043e\u043a\u043b\u0430\u0434\u0435 \u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u0438 \u043c\u0430\u0433\u043d\u0435\u0442\u0438\u0437\u043c\u0430 \u0431\u044b\u043b \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0441\u043b\u0430\u0439\u0434, \u0433\u0434\u0435 \u0438\u0434\u0435\u044f \u0441 IMU \u0438\u043c\u0435\u043b\u0430 \u0445\u043e\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043c\u044b\u0441\u043b<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/92a\/e61\/c95\/92ae61c95ae22356571c8929cd1ee995.png\" alt=\"\u0421\u043b\u0430\u0439\u0434 \u043d\u043e\u043c\u0435\u0440 3\" title=\"\u0421\u043b\u0430\u0439\u0434 \u043d\u043e\u043c\u0435\u0440 3\" width=\"1920\" height=\"1200\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/92a\/e61\/c95\/92ae61c95ae22356571c8929cd1ee995.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/92a\/e61\/c95\/92ae61c95ae22356571c8929cd1ee995.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043b\u0430\u0439\u0434 \u043d\u043e\u043c\u0435\u0440 3<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0438\u0434\u0438\u0442\u0435 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443? \u0414\u043b\u044f \u043d\u0435\u0451 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u201c\u0445\u043e\u0440\u043e\u0448\u0438\u0439\u201d \u0443\u0433\u043e\u043b \u043a\u0430\u043c\u0435\u0440\u044b, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0435\u0451 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0446\u0435\u043d\u0435! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u0442\u0440\u0438 \u0443\u0433\u043b\u0430 \u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 \u0438 \u0431\u0435\u0440\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f<\/p>\n<pre><code class=\"dart\">FrontSubmit[JoyConIMU[True]]; timestamp = AbsoluteTime[]; angle = 0.; rotation = RotationMatrix[angle, {0,0,1.0}];  EventHandler[\"JoyCon\", {   \"IMU\" -&gt; Function[val,       With[{angularSpeed = val[\"Gyroscope\"][[1]], time = AbsoluteTime[], oldAngle = angle},        angle += (time - timestamp) angularSpeed;        timestamp = time;      ];       rotation = RotationMatrix[angle, {0,0,1.0}];   ] }];<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043d\u0437\u043e\u0440 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 <code>rotation<\/code> \u043d\u0430 \u043d\u0430\u0448\u0443 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u043c \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0435 \u043c\u043d\u043e\u0433\u043e \u0438\u043e\u043d\u043e\u0432, \u0438 \u043e\u043d\u0438 \u0435\u0449\u0451 \u0438 \u0446\u0432\u0435\u0442\u043d\u044b\u0435, \u044f \u0441\u0436\u0430\u043b \u0438\u0445 \u0432 base64, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0425\u0430\u0431\u0440<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">CrystalRawStructure = \"1:eJzVWnlMFFccnl1YLIoXh2gVq2KMqbGRqvEMswoVW1EBUWukxRV2ZevC4lsQtZUSL9Bg6oGRo\/GCVLBGStRKFZlRUePZKBW1GsEjrYgVNSiXYudg3rAzuzsPZAd5fwwzyze\/73fPmzdv8GJjiE6JYZjJmTqEAk2MyaCJ0+oc6J8cqUOg3hSnU9BXXanDFACMCVFaTaRJ34+6tARj5ETpI5bGaE0mvTuNUvCoGK2ut9k9ZhL01F+MOQCMGRW4OQDs\/1fvl3bPgwRZ0XPzD6mdSXRg48W1Ne63vdUCINY8+BPLQGndoIBMhrKfGh1od91a77d0FmjVCDHQihHIkUCW2Hr\/SUXEhtVMcXhShwCtMVobB\/QRTJXojCBaE6c3xuhcMIs1EGKMXxLF1AAtiP2dhoZodQZtRJx+uT5uJcjMoEclztw\/K95gsFRR5lddqMPsWE0Ef\/sfuG60GU6JiSrsI5o5YKqf0WAEYPrdiEo\/zwocZGiyD5YHluEgYcl\/v3ebWd1srRN1mBMbpQWCPgBSysflnx3+lgAZnJuCQjbsvKLvKfSXPcjXMeTdSfCOGUQR2NNDNW3Z4EqCJ1e8J7k99HY5rzh3hnba08vY\/N9op2km144YknsL\/7D1Plt1Pfsc6++er46uulgMTvv6ee6McG9FsEmCHtU4+JgZT3AQzoxyKfLYqQUTPrv2lABT1uScv1xTh4N5lxRjfQYOUIPRzHhoR\/LndT0Sh197Q+dVEG25LziCvUkav0kpB3lh8IAqo78rCb7MzA\/YnFpPyEkew7m960zD6u8d3NRyur0s5HJAWiiVcNVcochILnQ73ga3s2XxHAeHAu6vcj90E+cbtG3y3b2O92pwpsjz8uqvbqitxcFtt7WBDyb2VYO5zLhhR\/L4WX73ir5zIUEV5\/YV3m\/Dxya\/wnlyqf4kRW4PvScWJu64lvOMAMlJ7ocn7nLtLHrDYL8Ytj96c20tIWewjygGB9\/MaYKtrVhO8vFcxLb6FPxUtrEB7yQRW3PAJ9U70okEHlHdMh0BFbHQw70jbzS4yOE0SL5t+\/WUkZFUS5aRPGlhXd\/KArLFhG\/62SrnvJgXRIeQzwmZVor\/OkgWyxm394GzzckWLP8Qc\/Xi0H0NjgtUJPAy7S75umcjLmfExOQyRkxYpbichYI1D\/5k0LMvTvqPfC2H28Xk47vfCTO4yeL2XO7VOZN7vZfRcjG5jJZDb8PVhY6IOSSX0fJfBG6X1XIxeUfEHJ483hW5KTmra8eUmozk4oSTkVwccxnJxQs4dRmNd48DTxlnYDg\/CZLxqXaJeZ57tFhyk5FcOJkgOnImQ8g5k4HkpVtGJt76wVXWWbeYXEbLxWuOzyeV792pe9k+b4iOZrdaWU6\/gLDmzwB60gCgiY3SR5j8jNGxBu0KAYO5cXVP5l1X4tUE6MPNjitqc7JOJZQS1oAw+awAMYxM1mwv9qVORrELleoz9\/2DapuE3zdYie9wvotDiRKx1NNe4r8vWTLQzPvzmsMkPrHwedCkogVpwBKtzkkcGvYqRmuuop4+0dM\/2UTRV4zuNlGMcY5SKAckFCPLAUkvBqVCymMqVE+DCweur7rP5XElzmdukNGwcgmVj+ZfA6GHWjjAOhpah4SG+qPLVkL3oX5NYn1GOyhUH6012bUe3xHNT7c\/J1srs8dsPeLgE4nChcD+koU7KIUq3GKauobpc7BwO1098hktWUNo9ShZ22gdoLW1bb96bF3N2LN6HaEmSnE9Wv\/A+h4FaJ5H5oT3bqx7ffRgI\/f9liwCZG5T3oLjz4SPLxZYhQP\/qKCBm+jvI1aAFRwwgAUS1oA\/n3iwb4NrI849OYvBorTKtIL0WmGl9lKt\/zbVtYoAJ4YtruxCr\/1KAePyjnyloJefIPADKWkLGxVsFUV7PmLR2oNksaIVvgqJkdFLhSRLUi8nJL0Y7Z2QZEl6VQVlOUtkC9Y8Wt+2+Id36yYGjghoGCP0JqdClQ2jgYRWcp5E0gT6HV0TFZQttazA7QuxU7t9xDZHAszgumih5eYIgbO5LmoFWMY2cOa1Qo1hFUXWgC5sc8SBiW2OVrsoBB5j2y1uDbiPbeAEN4Py7cTtthWNFK19oLXu9pyzoTVSSe0dkGQJattWu5W00QldFqOX\/dotzIIWbrKOhjPlFiZKoFWosmHHQpINo4GE5me3KJpAvyPJhk8IVrbU0hK3nc3SvmV6szObA+bbnsEYZjNQaYu9e+IGg0H\/KaAYmDK2rgS9cH3uoLQN3dUAu\/PX6ayDSQRQ7EkIWj6qNykJvGrw9\/J760k2Z+Ep4WulLdr0T\/ttW\/zoLQ7ipvadsTDYmQSLkpXZhVtqhC1YDAzMP61+svFvnKeV7L5tdc70rX4eOxibU+I9aw5QNif18A5KCD8p1FIMnKH0KZ70TT3eFuf0cn2Yu4i2uWTvmZdhtM1X3audUx2chTERA8fML7m2bZabMCYW8+shDpcxGZHircG8C9lur4Q5DPfwW3iFlyvJGTIVJ5T\/Z2j8Yq18Od9mLTqyBNqstDjRHXaM8xpS\/o90RSRWDx0x4ZWiPVwnznvF0K27wvsPkC4QFtiHFLgO3hGQmL1tz2kPEhzbsnTz57HUhNk9P\/DFxXov4bb\/KVWrS2aGqdRgWdOVA54X6gkw78eDYekZ3cj\/AdfNQvU=\" \/\/ Uncompress;<\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code class=\"dart\">CrystalStructure = Graphics3D[   GeometricTransformation[CrystalRawStructure, rotation \/\/ Offload] , ViewPoint-&gt;3.5{1.0,0.5,0.5} , ImageSize-&gt;{550,600} ];<\/code><\/pre>\n<p>\u0412\u0441\u0442\u0440\u043e\u0438\u043c \u0435\u0451 \u043d\u0430 \u043d\u0430\u0448 \u0441\u043b\u0430\u0439\u0434<\/p>\n<pre><code class=\"markdown\">.slide  # Slide  Here is my crystal structure!  &lt;CrystalStructure\/&gt;<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c29\/98a\/b6f\/c2998ab6f94228b57627829a613b745b.gif\" alt=\"\u0414\u0435\u043c\u043e\" title=\"\u0414\u0435\u043c\u043e\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c29\/98a\/b6f\/c2998ab6f94228b57627829a613b745b.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c29\/98a\/b6f\/c2998ab6f94228b57627829a613b745b.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043c\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 IMU \u0442\u043e\u043b\u044c\u043a\u043e, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u0430\u0439\u0434 \u0430\u043a\u0442\u0438\u0432\u0435\u043d, \u0438 \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441 \u043d\u0435\u0433\u043e \u0443\u0445\u043e\u0434\u0438\u043c. \u042d\u0442\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a RevealJS <em>\u0441\u0442\u0443\u0447\u0438\u0442<\/em> \u044f\u0434\u0440\u0443 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0430. \u041e\u0444\u043e\u0440\u043c\u0438\u043c \u044d\u0442\u043e \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 WLX:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"haskell\">.wlx  InteractiveCrystalStructure := Module[{rotation = RotationMatrix[1Degree, {0,0,1.0}], id = CreateUUID[], timestamp = AbsoluteTime[], angle = 0., CrystalStructure},      CrystalStructure = Graphics3D[     GeometricTransformation[CrystalRawStructure, rotation \/\/ Offload]     , ViewPoint-&gt;3.5{1.0,0.5,0.5}     , ImageSize-&gt;{550,600}   ];    EventHandler[id, {     \"Slide\" -&gt; Function[Null,       FrontSubmit[JoyConIMU[True]];       EventHandler[\"JoyCon\", {         \"IMU\" -&gt; Function[val,            With[{angularSpeed = val[\"Gyroscope\"][[1]], time = AbsoluteTime[], oldAngle = angle},             angle += (time - timestamp) angularSpeed;             timestamp = time;           ];            rotation = RotationMatrix[angle, {0,0,1.0}];         ]       }];     ],      (\"Destroy\" | \"Left\")   -&gt; Function[Null,       FrontSubmit[JoyConIMU[False]];     ]   }];  &lt;div&gt;     &lt;CrystalStructure\/&gt;     &lt;SlideEventListener Id={id}\/&gt; &lt;\/div&gt;  ]<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u0430\u0439\u0434, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c, \u043d\u0435 \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u044f\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438 \u043d\u0435 \u043f\u0443\u0442\u0430\u044f\u0441\u044c \u0432 \u043d\u043e\u0433\u0430\u0445 \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u043e\u0439 \u043d\u0430 IMU \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0430, \u0438 \u043f\u0440\u0438 \u0435\u0433\u043e \u0441\u043c\u0435\u043d\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435 \u0432\u043b\u0438\u044f\u044f \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u0430\u0439\u0434\u044b \u0438 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443<\/p>\n<pre><code class=\"markdown\">.slide  # Before  ---  # Slide  Here is my crystal structure!  &lt;InteractiveCrystalStructure\/&gt;  ---  # After<\/code><\/pre>\n<p>\u0410 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u0430\u0439\u0434\u044b \u0441 <em>DPG2025<\/em><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/256\/2b2\/c5c\/2562b2c5c4dfb4149161818f643c1fb1.gif\" alt=\"\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442!\" title=\"\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442!\" width=\"800\" height=\"450\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/256\/2b2\/c5c\/2562b2c5c4dfb4149161818f643c1fb1.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/256\/2b2\/c5c\/2562b2c5c4dfb4149161818f643c1fb1.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/figcaption><\/div>\n<\/figure>\n<p><em>Youtube &#8212; \u043f\u043e\u0447\u0442\u0438 <\/em><strong><em>\u043f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/em><\/strong><\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/680a7b966d3815ba95f2c288\" data-style=\"\" id=\"680a7b966d3815ba95f2c288\" width=\"\"><\/div>\n<h4>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0431\u043b\u043e\u043a\u043d\u043e\u0442<\/h4>\n<p>\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f\u0447\u0435\u0439\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u0443\u0441\u0442\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f JoyCon<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>jsfc4uri1%3AeJztfWtz28aWoGtmdqdq99NU7Q9oa3ZiUiJpAqRkmYqccWTnxlNx4vXjfvGqHJBoSkhAgAJAiaSj%2FRf7af%2FsnnO6G%2BhuNEjKj3vvVN1UTAHd531Ovx%2B4P05fT%2F%2Fh3r17%2BT%2FBz09RXkz%2FEd%2F%2BO%2Fw8zfN0EgVFlCYVyOtFzN%2Fgw7OgCN78v3%2B5d6%2FH89n%2F7nt%2BNJunWcE%2BskmaJHxS%2FEe6OkuTjnrloUjI2S2bZumMPfgtXXUhs3vDx5dR%2BOAEieC%2Fhw%2FZWcaDgrMgCVlerGLOikuuCIE4bLwoijRBYEjMC5X1PSWzUxamk8WMJ0VvQoSexxzfWg8E3oP2iUStkHqTOMjzn4MZB%2FQHGY9B72vgucjyNOvO0ygpeMaydJGEPOzOQnbZPWLzuDtg86zrs4Ivi27Mp4V4usiCVfew32dTECQfpYsijhLeTdKEsyxKLroey2cjAl3m%2BBjzIMT0Iza%2BENhev%2F%2FAIWYEL9lbQAQx985E1l5pupgXmpneFGhEGw5holw440z5BqCmQZzzEgKsUbybh0DgbUQ2mfNsmmazIJnwXpLetNolU%2BECYVpimQP4R8xhLBgJuh02Lp8u0xkvX%2BYx2Ee9ZOVTHlePZaoguSxzVuXTWsEgyK0lGcRZXkST31%2BleUTRc8re93v9DoOf81LhjANQcvEfEtgNFOVnQRyNs8Blsmi2eJ4E49iVlT%2BN4%2FSGh29TaXIDREa9wGYvXr5jszTkLJqyQKAJZTLeE25DiFMW5KtkwlpBdpF3GE%2Bu2%2Bz0ibK7IUtwE0QgA0bwPOPoIUJ63z8XeCem1UCSHxaJKGhFyi6hFIJUwLkLrIHMfFEg2FTBCAApGea2QmASxe1SmClr3ddNV%2BYwl9l%2FXszGPJNEekESxOnFG8x8HV1cFr3LNIvWaVIEcbvDtsBe8wxeAFK4EBlaLiyyBT%2BphCkWWSJfb5U9GJOVzCLLoBbZWB6Esjpk1y5KT9hhHwzAwMwilXEQcwWps1wJUit9GsWTSi4A5KrkvQJL5lboKQhVAl6m1xaEggJVQGxS83e%2BYumU%2FTL%2BDcK0B295Sy%2Fbbc150rV69ntAOGfffMOkS6q8hchr1%2BQ1XMBYndppI7ES7VZXRuihfP%2FLdJpzLG%2B7xgq4zIrK917FSRCvgnBX8lrYOhjIOqYMUjDry6C47AXjvGUq0oYA6vc89scfrISwpZEwhqfsGDCsbpjPri9BOIC3eZw0gnsI3jWlrmlXVVCGlDnPABGiLkt43IvS3jTKeOuBqFwedHRQxh48nUx4zKEzwaFqezBSMXsdxAuel56YFIsgNkDbHYPMn1ZZmk%2FSOd9MogTrhfO8XVG47bAHUCM%2FaLvNidoaIW8o%2FKkFT6erlRULZrtBMQw6yLp9YiKOoef0u5F2q6ncqKkRZndyrR1HYFUqPrZd5Z%2BSM9Sjr3gWpSFGW7xik0sO7Qjatex5qsYrr%2FUYgc8Zwr%2FAxhGcDpEL0areWrKJNVpW0ZjZ7XlbbzyMVkMJ8YxfRxPqG9k9YhVtZROysXcmYLS4%2BY2AMXRsXpr9XTSNKkA6D%2FJ70B4lBY4FOPQ1nxZFACYFXwJ1qLMWZsMh%2BhYSEcpG0qrcZeRxKu0QqkkYZOEPizh%2BCX2czdBQqrYD%2FZkac3BkE1gGFXPMW0d96M3RT7932DaUkIBBGD7XVW89gHEJ9XcgPFsfZSvEbikcGns97ROLrNOcpvm1YrSgZv%2FM7MRL1aCm8fv9fiV81YcQNQF794KNA2xW4VkbL%2BVIxOi0NbDRo7weMtCs26OL%2B6fV%2BIKHe1rENY9DAO7EgnKMbiz8BgwaHvbGweT3Cxqc4ejtX8Pj6TQ8fqCMyziUHVVw76jTbhp9XX0e6FGi13s%2Fiq659P0kxg40RVt93FiPbQKHwHbVca7hihaublNqlhLlz5gIKEun0MIePmLlEsAYOdsweg%2Bj62roLqCFhX98%2B%2FInwPv123wGTcATbGc5jdcRLktjaPi%2FfSjyfrXwgznUWeHZZRSHLcNiNiNjfmAa8yXDn%2B4kjdlFMO%2Buuj4O3W8uIwgMbZogvwzC9AaeqvmN4jLKe6K1aJX022Z2Cvg5iL5qGY6Z4HAjLpunhkZMVhbtE8e0zdvVnL%2F5L%2FBAdZYF8M84rxPl8zhYvflv8DyByncWZVma3WlW6H%2F833v3IDoTwP4AA1nIyx%2Bakz0PQwjDh7MgvLiBIOz9lht100uZ3sqD2RxaAalWh6VzzK%2BaNfkOHlFP0Cv%2BeHuit7%2BCxg8ZvwIwjw%2FYQ2aSldA0koIavCLWo1eg2O8NNaAoiaATHImxiwIN0xeQHGF6IOYYTkWJYd%2BJppuN9AKEdK76KFCHXXnwF1qlK1%2F%2BHeBfDTDjk2j%2BxlCjVAITJGhpPmXWpz%2B%2BfiNaB2hHWxfLDrtYwb81FHl4DuA5WGtltmT1MwxrjeFjDlLlIGnuw7%2BBkXX1LC1QB%2Fjjiz8D8WdogF37V0ADfj369ekXIK%2BHlD6k9CGlH9PzMT5f9TH3ysOUK8K6GlxV%2FIk32qp3yPZZqwuG3GcXSxhdgSnhaYVPA3xatw0kv0ICJxDOgcRZlzgrE2dg4xB1T%2BAcSJyliTO0cQjSK7F9C4eq1VawpODpY8sUrLTntXg2xwGlx4AXou6Dc4ELIO7jzwGi7ZOj9%2FdZF6TRuvQIfurwOSP0hpx1Uw76GIRApa76Zrqn0j0z3Vfpvpk%2BUOkDPX1I9Ic1%2BkOiP6zRHxL9YY3%2BMcEf1%2BCPCf7YhscohHTyoMEYAxMzPJvSldDsqqYahi9mDGzdcuRACu4L7ANhHulNlYMMu8Kg6F2dgCcIkCzIpSvsKAkIo0kiIq8vAqQrsA6EWSSP6k3KIggHa51jaVxJVwrd14T269JIjr7g4RscfYOjX%2BM4KN0s9dSMUWrpS64iz7cNZZSXHIWFnwO03z7%2BHKBe%2B%2FhzgPzgaeAqOYjoLgVIqCHHb8wZNOWIKq57KlomlNXK9PVMz8oc6Jm%2BlTnUM6tYLEf24MiDUynAvt0GVdWcp6D8TVC%2BghpsghooqOEGKMOBslCqapUCSYaRqpSvHA68anDfVYPzrhpcd%2BV03K3VHk%2ByNM8%2FzDPoCU2KVtX2dtgYnsfwPF4bM%2BLYM2QfcaGDqvExNkpUjSPsaiSfsaGjCn8MlNYj%2BYzlS2At2W2DQBx6ZNnT5AL6ZT9k6ezFbPE6CA3BZvA8g%2BfZ2hz%2BQH9qHhWTS5zgE7OPMJ73CZVe86sMNKy1PVUTJ2gUsznWV82GgQYfx%2BkOPL%2BGJ2E7RLW3lH9X8u%2FapoHDAaChSY9UJbxfh59kCnqS5i3EtiHyuYLIo6RF9qmBZDqIi8gKbTpDywHDLhgei2VmAS0JCP1cCiTYga0JF%2FjsozwHgsBEvNpz12Kt0fLh6rID9NsntTCU4B3h%2BY4wYFNoFen%2FWkCHM0vgxW9pgVaLo8lKt6sG2VPy7VcTNZolV7old0abzJu4iXh285o38dqAZMaLjkSGczPKmhi5cErP3IyEh0G5fbTnQel%2F%2BIGAhgok1%2FO7KiBk%2FmqkJVT4E5W%2F1unniJ%2Fr4E0xgAOkXWsTjuOtO9VHlukiHA9ZURfUyrzeZkRXvRtQgP4c4J%2BleFuKt5V4W4m3tXhzdJ%2BpUyhpOVuSU0Xb2Z6cKl7OVuVU8a7nGsNPewpx4yiwYQioW7fDQh4XAS4zvuETo1Gyx6A6IA6Sm9prMVdUCm2uHm6IlHqP5GsOUC%2BB8eXKSMK%2BLMpDf1fy71qMYkX6WPxi2pCeh2OR7x7rQrp8868sIcVAt08D3b4c%2Bg7Koa9HKR6liGEwETQGw2jmmRg5XqdRCENG8MlsZSes7QRtsDnTBpszNdjU3XWniQWjz60tq%2BtdzL8P4P%2BWBvCGJNTLmC1Vx2K2Un2KmVOSWaMks0ZJZhunEjAy5WQCSWJnr4zslZ29NrLXZrZXEfdcxL%2FqNAZVA7p0NpqGWMNunozoi8mIvi2f5FbnhFVMmWHwaJzX8AQpr0bKE6S8GqnGmRChpEPBpimSy6Xq%2B5INuioKaKx%2FoJwuR34CTk4siBkCAeprCWs1TyCgUVT1PDBZY6zJmJTsBDVNkLUafsrwIl5dCScEkRJcabM7mgyrOl9sYcqOIY6sLpHuJRbKSwS%2FNBbtsSWijReloGpGRgqhSjCJrQs6UAOOymJ%2BabEqU0guRbam5saqQKHMZs66yjFmc%2FpSWMxryYkgOWvTJ9sFy3blLQHRL%2BUj0GDVJoTxWhWWFtkM%2FmK13VVORXEFLYJsSU7Ip00%2Bx8xWV%2BLKeBJEvbZOlUoAIZr0%2BnLmAZPRlzJzWROLVDsgVXUCUloxv4dCExmjERUzfGIWbbO5%2BpvNNVTVXguZlTNw8lEYDJubygaDzzRsZYmKZv%2BT7dqq3NQV8VV306db2VdFaKuZBzuY2d%2FFzBB4w3FZY7gN9BlW93RPfr7V%2B5rV%2FS9l9YGIbW%2Br0f1NRtdN2VyGP6dm6GtU%2Fc%2BuGbwvY72%2FT2mzv09p%2F0WmtMuZJ7F7aOQYEXZoUA%2BjQV5UczIt1%2FT2zYjhqHcJfzyai8KR7XqEEpQzS%2FJJ3%2FOydVfBPMhyLrcUXAcZw1MZakcBGDjhN9UGA09OMSNchtt0dwIMQj%2FkOH%2FqHffZQ9E%2Fe%2FWC8svpF9yF9WYxawVZhgPiCCwB1uClIeSRg0WsNtJqG%2FpoOyDu5yPk%2Bsyp2AuOk0SSaoswzHGogrpfjvetYSfyZqflQzUt8F3JYaRyD1SSXajMwNAUujWsMeNB0jK1kShop5dlbodJVXDPi6bUbc22Ok7NuMJOMU8uCpwxJzDQkCWLOAb1%2BqAYpfUEyIkhkUT7rtmFDxXMiP0c%2FOwQcBLEk0UMwN8HBWCtfuLXPFaaaQEQY7rknt%2FQnLKAet%2FXd%2FJOQBB2PKqcR3i4%2FWwKCu1ptaC5aZfwhi68GQ%2BjxWwLpu%2FCjNObLWieC22SRbQbfAtu34XLZ%2FNi1YwY8mkAUefkehlkF1Fyseesxirr36qifVbuF8N9UkDiI6jD9n7Cg11yD%2FFeBwzD9mhTv5Y2gLRXWapR2JOVF9IdR0FOc0mPDsu0Nc%2FS71U6pFU5ORiKq4HfqxcQb75ZuRTp82rKvIWHRf5MO4hxIk7uUe%2BwQN%2Fx3mFyuexFaJWSJL0BVs8gWI1jLCIzxBqiot8rohnPC2jBoHi0ELPrzMUiglutRtU%2BJheNU2R%2BYgpDjaC2lqgrgbPp%2BwybQTN55U5eU3K7LkEQzy9x3YF65soN1JurAR1UFqX5%2BLDQz%2FmQuPeteVKNhtxPRt43qVOOTnwpiGNvE6UaK4lqBpDR8ZBsVVX5Gu2LYDZrYCuydL6rnfgiVNfF2O4YkNVGVbBRu3LsPT7GgOl6ThvvYzvarhpSSBgO%2Buzf2ON%2Bu1ekP0RLHraO2hBNDbgO1MGRgduhbuHIIYLsLpoSmKhktJ11EibeRNFSRENogL91NDFGFaD1tK6s4n2DpVusUsGvUdiWS8qioUhvaWStVpRFE0C9lZG1XlMWDYF6akLH9n9L9ZH29YV2GrwphjihrMjcgJWXOO%2B%2Fwmn1Nc6y39y0nQ6sCMvFa1wxNQjTCoAUHYg4fblRvpUkc1AaB%2BXrKgEPnAI2OEnzDJY5qpVjV2WM1Uk9woztmVU3treQC3pAsrcUtT7uYKC%2Fa8EE0%2BnvSv5d11aQDZJWh90q33rf%2BPO4q66iQdHF3DalPMEljnqYfSnZbY74jey34zbkP8OrgOuNF9Op2mJdSkDjhB%2FiNChaLX845N0j8DXSQGleJIV31OqL81GGo93CPeMXGef5K5694SBN%2BKUFhB7CkdcffIaEr%2Fl1Gi9ot%2FJXk9I7egx2fPTJUhItcXbpRTJNoZTeoAgdBvEWWGKOV%2BKguYTp5TFgtbzDDvMOoXh6ntmTmUbZ7CbI%2BMvgtzT7M89y4Pc6QEWJkEQHQb22OoxZQ42SDagwhvVrqAX0IuugMM4dmNLNgsnTMMTjgXXoIcjUbwIH2PeKpUGkB%2BPJ58HkstVK6FyqfopAB%2B3NF%2FmlhAHvvCnwegJwZLln69Zknc%2BjszROsxfJu9yhmgdm8HwTpRxqfmQfwFujmsV9qF4%2FXPKlO0eZX1p%2BBGRm6MRRk087bIaeGjU67rZDjhlZ3f330lvgxPOOZqKRbq7fUmhv9kZ7IJhhilHNMnRs9hQ3699aVV%2FTKJnCn85lvOZ4l8aLZxtLQKRDauY1SwSFtLJvaKXbohkkmyTETR%2FZRsmwi581SkQlxSERpdsSEakmSYzh9cbKQgNslIuKpUMumU7DxVHD2N4Gr%2BmhS9CkTnUab2vtNzFAP00lW0STZqPNtTP4m22uAW6KBaeAnktAnWKzDXF6tfjCYg467Mglpkxfjdj3aRrjlJTHvlG47wfnbZrfVHm%2BnTeu8oZ2XlDlHdt5WZV3VENca7meX8MN05vELe4hZi%2FmbnkpkzptbpkpHzuUbrFFdoPYlLmOm8Sm7FzX6shUCjcyOfMEpkZ44DdjDmrqQjOCl9O4bDXEfHF3jctaw9JadITdbbKhMpkFc2zDiAtznBpS%2FiSYQ%2FngDWoKEDkT9qcsmjfZGQA%2FpcQ9rW662FjQtBsxNpWzYUM5G9aE0wjuIBvO4TXIRxsAy%2Bstqj7l%2B6Nz9gdTSO8fnYOxvMM2%2B%2FZbdixFMdBa2kUcOAP2%2BDGu3dHqo191fcuOKW0ylLdkILbG58kTNgTWKuX4HHkOkVBXrYjpmOUVIThV6Pu4eNTIteYMmtxscshRhz12OUSmV%2Fp2KoGa3YSsdnAVza3e1VePDV95%2Fb%2BQs5CR5S3P%2B5ruEhPPTf56bHSnw3rGHT1G3Jpc9kMUF1t6glMCaRTXWdjrJV1QaRJDXACRbhbkWgI190SgT%2BS5%2ByIixxZKUWwM6G314YZ60IMKz3MaR%2BbUXNZcB75ZjCfpbBYk4ZbxRK4BNkuGw9FDp2Qix5ZMp7pdRBh7xCtkt6OkJXyzwG5hNwlaEm12rTY5vrl7acyj03CdDnZtcLtbXpUD9Eb2ZJiTSBuHuatGTjhP8shtGZmzAycBSpzWjZweAZCzDSlzduAkQNu4I6DDNljQB5F8p15lznZuEnSzBX0QyXfqVebswEmAbragD3X3wDmGL3N24CRAt1twACINnHqVOdu5SdDNFhyASEOnXmXODpwE6GYLDmE4OXTW7WXOdk4SlCx4bte%2BeiFvqjXK%2B8M21xjl2hzVFu8bShWo7TttV%2BaE83zkmpl2EsLhioB3zhO7cUQkOUMW53LcMw8qZzfxJPidxFM4G8SDKtJ31rNlzo7iCfC7iSdxIIo6rMG9A5z%2FcNqvzNlNQAl%2BJwEVTrP9BqDCwGm%2FMmdH8QT43cSTOBvEg%2Fp74GwEypwdxRPgdxNP4mxy7xDHs077lTm7CSjB7ySgwmm23xBUGDrtV%2BbsKJ4Av5t4EmeDeNC4DJ0tVJmzo3gC%2FG7iSRxwr9UIVPX2ph1hT%2Bu3UZp7LXKrOeBxMM95KO%2BBPeRdukbDwDC3sal%2BZ40PdZHBYPqKndiYZ1KbBfNW64IWjC5wIxoOTTUpjEU8at7vRNDbRnB9R4L%2BZoL1kVLNMNv9VTbdrcrLu%2Fipgm720Z%2BM9p7U1dBqzuiwjSDedhA02LlIEndG6%2Ba%2B3mBKa%2BVX3FBh6UCXSq8c6d65uKXCTvfPnVsnSKbXUXJxVnXEnN0lXK%2Bc0KXeDY3BccNyk8rIiyyIkpG54K1oiCVv7MwicH1Fu7a2J6SpFMJ%2Fu%2BxalosvUmNt%2B7KZwcprv0NaJjcuhxNb9vg0SvgbTsPYNCueInh5n%2Fcp3mNZjXQ7jC%2FndHmfAO7Qelu6KJ7jpW8veZ4HF3TPoUzu7cnbLyV7n17Qcq%2BgLEU5VzemZjxP42u80p3%2FRrej6qvP1SIhkMTdLnjn6lvxat53J%2FZ3EqdexmfpNTcvMdyjBcuMZN%2FriKtftQVU85QECtJCWUm5lkNT7aISaH0O%2BaB6l8tuFgO0J124aAuN23kooyeEAy1xnyB0q8wLeq2j0cYlu9KfYnID5X4XJcXxU9yNLGmHVYjqqmpbyfFS4I7YSX2uXS4MyFkE4xDT%2B64bhpEFEsG50XOxmdzYM9KoiPu%2B4C%2FmzknMg0zFTBlKxqGiKqbKaDzUrpS5LZ%2BUSLU7MneWR9x3qejkZeHDdUzLc%2B%2F76r6a%2Bv%2B9Xq8qm%2BeNWzCwEiqFwAty36b95aBPlzJsKPxGyR%2Bx99gPPD63qwAcQ3vDERvgONdkTPftQj308uwdVo6%2B792ZJc4RulkORszzjzuC93A7c8%2F3vLvzx7HDgO4X8prd8GX%2F94eDZiM7rAxtzPNlgToePr6rfsePG1kd4wrAEbD0af9LvfIbsT36NAk2pklaQC2ySEKq8F3i8esXyQ%2F4%2FYMCWqVpdHF4dldZH%2FsddgTuwOESPRlGw8bZx3E85B3Cw%2BFQy%2FXoH%2F7QUB8fjnB%2Bq4QZNvjCG2IAHhHxQ0W40WSP%2Fbp38iLI0AA8S4L4VRpjSB4%2BvbPuQkYRhn6zAH1dAFHJ1Auh6gpsBKPi4oTU420TQN3jTmi3gQxQ41MjW3tGkDaxe0SToMAdWyFVqTndnNFh43pnaCJbzqBH79ligutEgeyMswM2lo%2Blk6HyLpBY30wZd1hggapdM5pKKJ247Rj40oXB4FhoSsKcUcPyNsjAmIaIUiTVmytb1XwxhwaoamHoVmABRcGGD2ZmtaWc%2BsLlMYsRHXvqqK3ZfbWVul%2Fuhu7bVzmJTpy4zV27Qh5vN9HkoOverRt9RAzYQJoetw6Ftja8BPtB3rMuikhvHMHYHDOqZlIXHuz8ml%2BBMQptP2ntKB1UgeYeuuq8qb3ShIMz3%2F4MiOyc7d6mW%2Fjl1ki9C626K3afUoqcVAqJ7ry4d34kg4LSb21caW9np0vgRYAHptbJm5%2BECDnuq9K49HC4tQ0ERl0GiNStFTq53GrPJHA9MnaQ9tbumOmxpnXOTO%2FXemo02KxtmjcObdohZ%2BwJ%2FKRoO6ui7bj%2FyeF29gXD7Xtz76QWcMauyjuFnMSkLZXkRp2JM%2Bx0Xo2BZwI1hd64gdcOwbej3H%2BlAJSf2IhwB%2BSPL56JT2d8ZpWHOxwHX67a%2B2LmcCle%2B7bI5%2BsOA6T%2FFLqXX0r5TJWPaID2N64ydAu%2FtM6fXtX%2BRd2sfevmM5V%2B5G91NAxN0DRHQ%2Fvtr%2BHsL6v5Fnf%2FbWguXK7mwJu%2BrqLyNe4bqL178z20DOqzc1LCmkUX%2BRiMoeszwVMyNJTFGf6erlPem2JXvCWOGGXVhCeeffGP2%2By%2BuHihtBaOI4DDlnGDPomGswH2NJp33tYb77sT8O9CoI4%2B%2BFz%2BQ53ArcNj8rtVcXqDt8UseDJZddhldHGpveJlMlGxCHnNhzD8pCP24uwebWbHQ01L8hIdeoUU8ZFBSNWg2gLsZFshO3IXIUvNxxUhmkqmbwlWV%2F7QLRhTMVqezS1dh%2F3e8aPD4%2BNDKHz%2BUc8%2FPvIG2pQ8bQWucC3LHHu9R4feI9w45h%2F6vcNHvn90VCETolCfvtaDe%2BblYeA4vfBbkL9P31DE%2B5YeH%2BEKo3Zj7FRdUuDEjXXco6FlJ%2BEWIXPpPlHR2Lo9nc2NUkOo9q2sBGYYVfvgFWJ8i7J4j5xIrUpqBN3HaxtQ14Ev1X7IWrgvmsDm6Q1C4UoYauZtYugPnPw2s8Mf36b6KVLjdRBd5g%2BP7AKmIk6TRriQSLfJb4eWw%2BZBFhV4IF6g%2FRvzDafI7CeWW7rd2PBfJYBkLv4%2BeaLZUSQdnOpBs4GFAP%2FjFPR%2BdHRc50QFjr7GCdH8DfMPD82y6Iss4skw4p%2BANMcC0iq2g3OSGOGU3E2gw3PUQECZTGldij6hROEKf76FQsWigwNDLaKCZ3gj%2BvQrKUFvdQ2%2FTsOb8%2BKn58%2FEF%2FGSWsX68y8fXr97%2Bf1Pz5u7h3bvwuyADLEx2LHz4Gh4oA9SirBx1aiukqGNmDTkIX0bEKPIw1MLiUsu3SAGmpMXfn1tC7dvTtn%2FaQl%2B7A%2FBeAguTpzj5rtxx1nv33fmbk2w1sxBUn2OUOaspVosLgXD0vCRYhyXykXHqSMn0KACPBWf8zMqg%2FvGJgj8r%2Bl%2Bbdki1%2BbLW3ZIKc54UsxRStQSs90nuORLufWeoGhHCZ7gpi4GPjgPlAul58Hkdy7OsRiHjkeuU9DCPpJdW5uoUZdmKQUMs9CNUkeDkTkppTGGgiPeOsZBt5HjoKspQUc%2FIjOqH4OzocX5lZFxaqZRJ%2FzP%2FvjuraXVYDCyUobHO%2BlJx6lH%2BjluW1Z9dmzkOGZtw5unhkfOk8w1HnVrO8%2FtbrD6T3TU1HnIbwPWa3GA1X3gzMZTB3xG1jGjjZ7DEqqNgBxbPppcE1Sh5Agh%2FRjNyHGwpxm%2BPM1SQ6sO29jY1ez8qHYpx0b1bzfaYnhcs0XDKRnXMRuT8YmLjrF33t50vwN%2BNqfvM2%2Ff%2FGfsqNP30l33gEa77SYffgHyYTN5sGKd%2FKatpoJyQJTfB71lD7JxoXOlHtb4cN7A7qq8sYeZn2BpgQnoRIUKpF5139HJbkVBl1K71Y7I1rQaCV7W1kJcRA9REHTqrcr%2BJYugQaWZpJF1j561ikqITWo4yFX6W4T127nKR6BQvXRo3%2BAZYhr7Hncvao0Nxq3edRD27VWl%2B7se3nliFEqx1prxCY%2Bu9WJfw3Ws6Wo89Gbkux4tmDSzMRoYB4Gm5WOFT70FWqqR2HYnrK6OpofVTQyjfB5Ar0LQw%2B7Q2SIv0pl4N9cfGxZfG9gbahr63U0EaxWqcUHOEMPeoSCPfZu7FOTmBSnNDhsUnBOOzW6p0OWKnXK21ur3qlW7DUCrXYDGuwAFuwDhVQ%2B7wGW7AK13gsJbH3ZiWV4zcXKXIFKftjcCSFbHW0JHHUH%2FG4ydxXwXk%2BEdKLvAxeq%2Bgl1csAsg3SiyE%2Bed4mgnKHk7yK76%2FoUi6U%2B4oB7EZ%2BUNXH%2FFePoqSuK%2FXba3RUnIl%2FX9%2FjwU%2BmOH8eE%2B%2B%2FcPH169e%2F38wwe2%2F1DeTD5vVVeSC9W12%2BAw8YKrvU84X994YCAp95PlPRLml6llSrrqlj0xJ57lboTENLciRLfKmVQkgoKQW%2FDUNHIVGUEYPlP73LacdYhwPk1T0%2BKIQGnMcaK49euPYIXStiP2Pz9G4S382j07Y8qiDvBzMOO3v2oMDF%2FRVsEo7JgrdEI6JVvbUlfsj%2FlaGkOIfXWlRYUCeuuqJcF1dIHD5R5EumMnjaQCxUlq%2FLGc9dK1LoPB3EDa3olHpTywaWCgm9%2FFI0wnixmetaiTf%2FbLS6y%2BMC0NQh5WurhO5VDU49dlRGyYspcezcutkgqjvMixMTLUvKTbVuVupNuqupBWKbeqNootJq7ktRWgfZhmLyCOvGH%2FqDoEX2Qre478vZDgvEHdTN%2BZCY5RbLR9U2Km067om%2Bc6t5gARsU0Uchxw7s1pY8FhtJFbi%2BBcO8w8TyTB4PcjZhRwDcVXpzx%2FE1ZW1sMpxM2VmF0Xf5b4ULVX%2FXfa1qWy3BNRB9b%2B3nrBZ0g9%2BTF9qz1ur1n2N8hiZw9M0SxV7TJnQK3Sa1aj8DdoAtHC0xzc7GRs2m7QzN8fQtZM2y5%2Fchs3wSMVhPKjsC3eQE9iCdW6IjpTmyBVT0zgZF8wZ%2FHfCbGegSwJ5gYSD3qLgmXsb2Mx0EB%2FRz8UEeeZt15GiV45pdWN3nYnYXssnvE5nF3wOZZ12cF9LO62OETTxdZsOoe9vtsCoLko3RRxFHCu0macJqc6Hosn40IdJnjYyw%2Btww0xxcC2%2Bv39xxiRvCSvQVEFFNODO%2FZRSgSfVDuhIlyEWhnquUBqGkAoV5C4KyN%2BP6MPH8L%2FcEpnlVIJvpnDehTDGWHV2yUl%2F4dCYod8To2X8UFfHqKuPpPT8nMV7x10Hi38pfm68p8XStos775TQbyqzSP5HHO99V6o%2BhNAEByoSK%2BDhDlZ0FMM9kOM0azxXOKbUdW%2FjSO0xsevk2lGwyQSZrxnvASlIuqKgyyixzq0uRarw0NNqJkUbDOoQjhehoi0TlixNNKUnk4%2BBJKacwlO%2ByVt0SP3LhN%2Fb6uqtFxrZnoZ7r%2BWBLp2esFverOtHaHbYFVd6q1qwVey%2BTaN5ut5uxWb3rlB3c2xrPxpR%2BC7NpF4QmeeTQ%2FTmEUFA25FApbK1FMXuGdx1Y0KAgVjC%2Bh%2F1SH0M6g4unR6ugpvOUtvRCap07Jc3o2Hj49x8%2FnSovrA1bKa9dkNSzMWJ3aaSOxesdC6KDc%2Bst0mtN89a5hAB6xAu59bdtlFV%2B7ktci0sFA23%2BA5hRfOBjnLVOJNu4n6Xl4BWoJYUsiYewegOF3w9ql2eyqSmz8sumfNILTtpWuKbGhVVWJGNLlPAMkiLIs4XEvSnvTKOOtPVFX4OC9AmVsz1hG2BupGKXNcHlp%2FfqKQ7tjkCnXHDaTKMFoEaeicNthe1Br7jXMqBvhbSj7qYVMp6uVi9ri3DZjous7yNpe1rGXI9yHwQ0tjbC6k0vt2AFrUlGp21N03%2BtdjzNxsBsce003dNIJa%2FHWcoyNZOtiN4htszaf6Bd1czkuycV%2BDHMALWOlrNM3dncMr8sONDje5qP38x30jEIrzU9dW32I%2B7QoYOCJ3gDqUMNoKM298Lv1q3fqWTuBtA3hbjC5ffYIzwnTT7%2BnbVWTQPVRvTbRVx51klMGjd2OGlmnGU2zy5AU31I5M3vB6gsoHearOyjKvk8Dgh6bdYdD82l3tPEqh70SYs8cEzd0yQHuxIJydPIt%2FAaMvFjBuHscTH6%2FoDEKsvnX8Hg6DY%2FLz7VV49n7d9ZpN42%2Brj57J3a9Y%2BI4psVirLicE0nOHrgWUG4zNR0bEGDmd37MGSKI7ISm5ZuGpmF0XY1LBbSw249vX%2F4EeL9%2Bm8%2BCOH6CLRenweikHNt%2F%2B1Dk%2FWrhB3OoS8KzyygOW4atbEbG4Hca8yXDn%2B4kjdlFMO%2BuYIQL49KbywjcrY2B88sgTG%2FgSbjmoi%2FPKGK93Sqpt%2FXMFHBzEHtlXk0zwb54XDYTDY2JMfU2%2FYd79%2B7l%2FwQ%2FrxdQJ%2BID7sp781%2Fh4RfarGpB%2FDM8PIvyeRys3vwjPPN89v8BSeiR3Q%3D%3D<\/code><\/pre>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0440\u043e\u0439\u0442\u0435 \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 (\u043f\u0440\u0430\u0432\u044b\u0439 \u0443\u0433\u043e\u043b \u0433\u0440\u0443\u043f\u043f\u044b)<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u0437\u0434\u0435\u0441\u044c \u043b\u0435\u0436\u0438\u0442 <a href=\"https:\/\/jerryi.github.io\/wljs-demo\/PresenterJoyCon.html\" rel=\"noopener noreferrer nofollow\"><strong>\u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 <\/strong><\/a><strong>\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438<\/strong> (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435).  <\/p>\n<h3>\u0410 \u0435\u0441\u043b\u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f?<\/h3>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>WLJS Notebook \u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 HTML, <a href=\"https:\/\/wljs.io\/frontend\/Exporting\/Dynamic%20HTML\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0434\u0430\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443<\/a>. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0438\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 JS \u0438 WL, \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 HTML \u0444\u0430\u0439\u043b, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0441\u043b\u0430\u0439\u0434\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u0438\u0445 \u043c\u0430\u0448\u0438\u043d \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 IMU, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u0442\u044c \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043d\u0430 JS, \u0438 \u043f\u0440\u043e \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u044b\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \ud83d\ude42<\/p>\n<\/div>\n<\/details>\n<h3>\u0417\u0430\u0447\u0435\u043c \u0431\u0443\u0445\u0430\u043d\u043a\u0443 \u0445\u043b\u0435\u0431\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432 \u0442\u0440\u043e\u043b\u043b\u0435\u0439\u0431\u0443\u0441?<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b75\/741\/331\/b75741331f3351660901478ac26e8ec4.png\" alt=\"src. \u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\" title=\"THAT beautiful comics\u00a0by Zach Weinersmith\" width=\"242\" height=\"273\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b75\/741\/331\/b75741331f3351660901478ac26e8ec4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b75\/741\/331\/b75741331f3351660901478ac26e8ec4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><a href=\"https:\/\/www.smbc-comics.com\/comic\/2010-12-09\" rel=\"noopener noreferrer nofollow\">THAT beautiful comics<\/a>\u00a0by <strong>Zach Weinersmith<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u043e\u0441\u0442\u0440\u0430\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0440\u0443\u0442\u044f\u0449\u0443\u044e\u0441\u044f \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0442\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u044b \u0438 \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0438 \u0442\u0435\u043c, \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u0441\u044e\u0434\u0430 \ud83e\uddd9\ud83c\udffc\u200d\u2642\ufe0f \ud83e\udd0d<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<ul>\n<li>\n<p>\u200a<a href=\"https:\/\/en.wikipedia.org\/wiki\/Universal_3D\" rel=\"noopener noreferrer nofollow\">ECMA-363<\/a>\u00a0Specification, Wikipedia:\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Universal_3D%EF%BF%BC%5B2%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/en.wikipedia.org\/wiki\/Universal_3D<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>DPG2025, Homepage:\u00a0<a href=\"https:\/\/www.dpg-physik.de\/%EF%BF%BC%5B3%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/www.dpg-physik.de\/<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>Leo. Right Joy-con Controller as a Remote, Hackster:\u00a0<a href=\"https:\/\/www.hackster.io\/leo49\/right-joy-con-controller-as-a-presentation-remote-5810e4\" rel=\"noopener noreferrer nofollow\">https:\/\/www.hackster.io\/leo49\/right-joy-con-controller-as-a-presentation-remote-5810e4<\/a>\u00a0(2024)<\/p>\n<\/li>\n<li>\n<p>Jen Tong, Nintendo Switch Joy-Con Presentation Remote, Medium:\u00a0<a href=\"https:\/\/medium.com\/@mimming\/nintendo-switch-joy-con-presentation-remote-5a7e08e7ad11\" rel=\"noopener noreferrer nofollow\">https:\/\/medium.com\/@mimming\/nintendo-switch-joy-con-presentation-remote-5a7e08e7ad11<\/a>\u00a0(2018)<\/p>\n<\/li>\n<li>\n<p>RevealJS, Homepage:\u00a0<a href=\"https:\/\/revealjs.com\/%EF%BF%BC%5B6%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/revealjs.com\/<\/a><\/p>\n<\/li>\n<li>\n<p>Manim, Homepage:\u00a0<a href=\"https:\/\/www.manim.community\/%EF%BF%BC%5B7%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/www.manim.community\/<\/a><\/p>\n<\/li>\n<li>\n<p>Motion Canvas, Homepage:\u00a0<a href=\"https:\/\/motioncanvas.io\/%EF%BF%BC%5B8%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/motioncanvas.io\/<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>RISE, Github Page:\u00a0<a href=\"https:\/\/github.com\/damianavila\/RISE%EF%BF%BC%5B9%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/damianavila\/RISE<\/a><\/p>\n<\/li>\n<li>\n<p>WLJS Notebook, Homepage:\u00a0<a href=\"https:\/\/wljs.io\/%EF%BF%BC%5B10%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/wljs.io\/<\/a><\/p>\n<\/li>\n<li>\n<p>Vasin K. Reinventing dynamic and portable notebooks with Javascript and Wolfram Language, Medium:\u00a0<a href=\"https:\/\/medium.com\/@krikus.ms\/reinventing-dynamic-and-portable-notebooks-with-javascript-and-wolfram-language-22701d38d651\" rel=\"noopener noreferrer nofollow\">https:\/\/medium.com\/@krikus.ms\/reinventing-dynamic-and-portable-notebooks-with-javascript-and-wolfram-language-22701d38d651<\/a>\u00a0(2024)<\/p>\n<\/li>\n<li>\n<p>\u200aVasin K. Dynamic Presentation, or How to Code a Slide with Markdown and WL, Blog post:\u00a0<a href=\"https:\/\/wljs.io\/blog\/2025\/03\/02\/ultimate-ppt\" rel=\"noopener noreferrer nofollow\">https:\/\/wljs.io\/blog\/2025\/03\/02\/ultimate-ppt<\/a>\u00a0(2025)<\/p>\n<\/li>\n<li>\n<p>Joy-Con WebHID, Github Page:\u00a0<a href=\"https:\/\/github.com\/tomayac\/joy-con-webhid%EF%BF%BC%5B13%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/tomayac\/joy-con-webhid<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>JoyCon Presenter Tool, Online notebook:\u00a0<a href=\"https:\/\/jerryi.github.io\/wljs-demo\/PresenterJoyCon.html%EF%BF%BC%5B14%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/jerryi.github.io\/wljs-demo\/PresenterJoyCon.html<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>Faraday Effect, Online notebook:\u00a0<a href=\"https:\/\/jerryi.github.io\/wljs-demo\/THzFaraday.html%EF%BF%BC%5B15%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/jerryi.github.io\/wljs-demo\/THzFaraday.html<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>James Lambert\u00a0VR powered by N64, Youtube video:\u00a0<a href=\"https:\/\/www.youtube.com\/watch?v=ha3fDU-1wHk%EF%BF%BC%5B16%5D\" rel=\"noopener noreferrer nofollow\">https:\/\/www.youtube.com\/watch?v=ha3fDU-1wHk<\/a>\u200a<\/p>\n<\/li>\n<li>\n<p>Dynamic HTML, WLJS Documentation, page:\u00a0<a href=\"https:\/\/wljs.io\/frontend\/Exporting\/Dynamic%20HTML\/\" rel=\"noopener noreferrer nofollow\">https:\/\/wljs.io\/frontend\/Exporting\/Dynamic%20HTML\/<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/articles\/904196\/\"> https:\/\/habr.com\/ru\/articles\/904196\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>PS: \u0440\u0435\u043f\u043e\u0441\u0442 \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 Towards Data Scien\u0441e.<\/p>\n<\/blockquote>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u0430\u043a \u0443\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0417\u0435\u043c\u043d\u0443\u044e \u043e\u0441\u044c!?<\/figcaption><\/div>\n<\/figure>\n<h3>PDF-\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e?<\/h3>\n<p>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 <em>\u0441\u0432\u0438\u0441\u0442\u043e\u043f\u0435\u0440\u0434\u0435\u043b\u043a\u0438<\/em>, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b \u0432 PowerPoint 15\u201320 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0448\u043b\u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043b\u0430\u043d. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 LibreOffice \u0438 MS Office (\u0434\u0430\u0436\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0434\u043b\u044f Windows \u0438 Mac), \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u2014 \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043d\u0430 \u201c\u0441\u0446\u0435\u043d\u0435\u201d \u043f\u0440\u043e\u043f\u0430\u0434\u0451\u0442.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u044b: \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e PDF-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0438 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 GIF-\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0443\u0448\u0430\u044e\u0442 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f), \u043a\u0430\u043a \u043d\u0438 \u0432 \u0441\u0435\u0431\u044f.<\/p>\n<h4>\u041d\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b<\/h4>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 <em>\u0441\u0432\u0438\u0441\u0442\u043e\u043f\u0435\u0440\u0434\u0435\u043b\u043a\u0438<\/em> \u043e\u0442 \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0441\u0443\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043c\u0435\u0434\u0438\u0430-\u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universal_3D\" rel=\"noopener noreferrer nofollow\">ECMA-363<\/a><\/p>\n<figure class=\"full-width\">\n<div><figcaption>Convert MATLAB Figure to 3D PDF \/ <a href=\"https:\/\/github.com\/johnyf\/fig2u3d\" rel=\"noopener noreferrer nofollow\">Ioannis F. Filippidis<\/a>\u00a0(fig2u3d manual)<\/figcaption><\/div>\n<\/figure>\n<p>3D \u043c\u043e\u0434\u0435\u043b\u044c \u0432 PDF \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0412\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0433\u043b\u043e\u0432 \/ \u0441\u0440\u0435\u0437\u043e\u0432, \u0438 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 GIF \u0438\u043b\u0438 \u0447\u0435\u043c-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c. <\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u043e\u0431\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f <em>\u0444\u0438\u0447\u0430<\/em> \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0433\u0434\u0435, \u043a\u0440\u043e\u043c\u0435 Adobe Acrobat, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0421\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u0441\u043a\u0430\u0447\u043e\u043a \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c,  \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043d\u043e\u0432\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043b\u0430\u0439\u0434\u0430\u043c.<\/p>\n<h3>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043d\u0430\u0443\u0447\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f DPG<\/h3>\n<p><a href=\"https:\/\/www.dpg-physik.de\/aktivitaeten-und-programme\/tagungen\/fruehjahrstagungen\/2025\" rel=\"noopener noreferrer nofollow\"><strong>DPG-Fr\u00fchjahrstagung<\/strong><\/a> \u2014 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u043f\u043d\u0430\u044f \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043f\u043e \u0444\u0438\u0437\u0438\u043a\u0435, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c\u044b\u0435 \u041d\u0435\u043c\u0435\u0446\u043a\u0438\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u0449\u0435\u0441\u0442\u043e\u043c (DPG). \u0415\u0436\u0435\u0433\u043e\u0434\u043d\u043e \u043e\u043d\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435  \u0443\u0447\u0435\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0432 \u0433\u043e\u0440\u043e\u0434\u0430\u0445 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438, \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u0438\u0437\u0438\u043a\u0438<\/p>\n<figure class=\"full-width\">\n<div><figcaption>Deutsche Physikalische Gesellschaft<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>DPG2025 (\u0412\u0435\u0441\u0435\u043d\u043d\u044f\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430) \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u0420\u0435\u0433\u0435\u043d\u0441\u0431\u0443\u0440\u0433 \/ <a href=\"https:\/\/www.pexels.com\/@tobiandchris\/\" rel=\"noopener noreferrer nofollow\">Tobi &amp;Chris<\/a>, Pexels License<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043c \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432, \u0438 \u0434\u043b\u0438\u0442\u0441\u044f \u043e\u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0434\u0435\u043b\u044e, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043b\u043e\u0445\u043e. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u044d\u0442\u043e \u043d\u0435 \u0443\u043c\u0430\u043b\u044f\u0435\u0442 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432, \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u0437\u043d\u0430\u0442\u044c <em>\u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0435\u0437\u0434\u0430 \u0443\u0436\u0435 \u0443\u0448\u043b\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f<\/em>.<\/p>\n<p>\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438 \u043f\u043b\u0435\u043d\u0430\u0440\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u2014 \u043c\u0430\u0433\u0438\u0441\u0442\u0440\u0430\u043d\u0442\u044b, PhD-\u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b (\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e), \u0430 \u0440\u0435\u0436\u0435 \u2014 \u043f\u043e\u0441\u0442\u0434\u043e\u043a\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0430 &#8212; \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \ud83d\udca1 <em>\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a<\/em>.<\/p>\n<h3>\u0427\u0442\u043e \u0437\u0430 JoyCon<\/h3>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0435\u043b \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u043a\u0430\u0437\u043a\u0430-\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0432 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0418\u0418 \/ \u201cPPT Clicker\u201d image using Dalle 3 by OpenAI<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u043b\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0441\u043b\u0430\u0439\u0434\u043e\u0432, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043b\u0430\u0437\u0435\u0440\u043d\u043e\u0439 \u0443\u043a\u0430\u0437\u043a\u0438, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u043f\u043e Bluetooth \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 <em>\u0434\u043e\u043d\u0433\u043b<\/em>. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0438 \u043f\u043e-\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 &#8212; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a \u0443 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 Nintendo Switch \u0438\u0437 2017-\u043e\u0433\u043e<\/p>\n<figure class=\"full-width\">\n<div><figcaption>JoyCon (R)<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043e\u043d \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <em>\u043f\u043b\u044e\u0448\u043a\u0438<\/em><\/p>\n<ul>\n<li>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a \ud83d\udd79\ufe0f<\/p>\n<\/li>\n<li>\n<p>11 \u043a\u043d\u043e\u043f\u043e\u043a \u260e\ufe0f<\/p>\n<\/li>\n<li>\n<p>IR \u043a\u0430\u043c\u0435\u0440\u0430 \ud83d\udcf8 (\u0441\u043b\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0434\u043e\u043a\u043e\u0432 \u043f\u043e API)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 IMU \ud83c\udf10 (Inertial Measurements Unit) aka \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>Bluetooth \u0441\u0432\u044f\u0437\u044c; \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 HID<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043d\u043e\u043f\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a PowerPoint \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043a \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438, \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043c\u044b\u0448\u0438 \u0438\u043b\u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.hackster.io\/leo49\/right-joy-con-controller-as-a-presentation-remote-5810e4\" rel=\"noopener noreferrer nofollow\">Hackster: Right Joy-con Controller as a Presentation Remote<\/a> (Python)<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/medium.com\/@mimming\/nintendo-switch-joy-con-presentation-remote-5a7e08e7ad11\" rel=\"noopener noreferrer nofollow\">Medium: Nintendo Switch Joy-Con Presentation Remote<\/a> (USB Override MacOS)<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u043a\u0430\u043a-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c IMU \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0438\u043a. \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0439\u0442\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b PowerPoint \u0438 PDF \ud83e\uddd9\ud83c\udffc\u200d\u2642\ufe0f<\/p>\n<h3>\u041a\u043b\u0430\u0434\u0435\u043c \u0441\u043b\u0430\u0439\u0434\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/h3>\n<p>\u0418\u0434\u0435\u044f <a href=\"https:\/\/habr.com\/ru\/articles\/414757\/\" rel=\"noopener noreferrer nofollow\">&#171;\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0439&#187;<\/a> \u043d\u0435 \u043d\u043e\u0432\u0430, <\/p>\n<p>\u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0432\u0441\u0435\u043c. \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u044f \u043f\u043e\u043a\u0430\u0437 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0439 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043c\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0431\u0430: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, JavaScript, \u043c\u0430\u0433\u0438\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u043d\u0430 CSS \u0438 \u043c\u043d\u043e\u0433\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0438\u0434\u0435\u043e. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e <strong>\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e<\/strong> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435.<\/p>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u044b \u0432 Markdown \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 (\u0445\u043e\u0442\u044f, \u0441\u043a\u043e\u0440\u0435\u0435, \u044d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430) \u2014 <a href=\"https:\/\/revealjs.com\/markdown\/\" rel=\"noopener noreferrer nofollow\">RevealJS<\/a><\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/680a9839159a09bab05b95ec\" data-style=\"\" id=\"680a9839159a09bab05b95ec\" width=\"\"><\/div>\n<p>\u0423 <em>RevealJS<\/em> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 API, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434 JavaScript \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e<\/p>\n<pre><code class=\"javascript\">setTimeout(() =&gt;{   Reveal.navigateNext(1); \/\/ \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0434 }, 1000)<\/code><\/pre>\n<p>\u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u0438\u043d\u0443\u0441\u044b. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0430 \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043d\u0435\u0433\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b \u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 JavaScript-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043e\u0434\u0438\u043d HTML-\u0444\u0430\u0439\u043b, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443. \u041b\u0438\u0431\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<h4>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 Jupyter Notebook<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f Python \u0438 IPYNB, \u0442\u043e\u0433\u0434\u0430 \u0431\u0435\u0440\u0438\u0442\u0435 nbconvert \u2014 \u043e\u043d \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0430\u0448 \u0431\u043b\u043e\u043a\u043d\u043e\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e RevealJS, \u0438 \u0432\u044b \u0434\u0430\u0436\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435! \u0418\u043b\u0438, \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0449\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Jupyter \u2014 <a href=\"https:\/\/github.com\/damianavila\/RISE\" rel=\"noopener noreferrer nofollow\">RISE<\/a><\/p>\n<figure class=\"full-width\">\n<div><figcaption>RISE Extension<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0434\u0435\u044f \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u0443 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 JoyCon.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0430\u043c\u0438 \u043d\u0430\u00a0<a href=\"https:\/\/mybinder.org\/v2\/gh\/damianavila\/RISE\/master?filepath=examples%2FREADME.ipynb\" rel=\"noopener noreferrer nofollow\">Binder<\/a>! \u041f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043e\u0432.<\/p>\n<h4>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 WLJS Notebook<\/h4>\n<p>\u041c\u043e\u0451 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a <a href=\"https:\/\/wljs.io\" rel=\"noopener noreferrer nofollow\">WLJS<\/a> \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u044b\u043c (\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0438\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c, \u0432\u0435\u0434\u044c \u044f \u0438 <a class=\"mention\" href=\"\/users\/kirillbelovtest\">@KirillBelovTest<\/a> \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 <em>\u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u0435\u0440\u044b<\/em> \u0432 <a href=\"https:\/\/github.com\/JerryI\/wolfram-js-frontend\" rel=\"noopener noreferrer nofollow\">\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>. <\/p>\n<p>\u042d\u0442\u0430 IDE \u0441 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0442\u0435\u0441\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u0432\u0435\u0431-\u0441\u0440\u0435\u0434\u043e\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043b\u0430\u0439\u0434\u044b \u0442\u0443\u0434\u0430 \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0430 \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c Markdown<\/p>\n<figure class=\"full-width\">\n<div><figcaption>WLJS Notebook \/ <a href=\"https:\/\/wljs.io\" rel=\"noopener noreferrer nofollow\">https:\/\/wljs.io<\/a><\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u044b \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u043e \u0442\u043e, <a href=\"https:\/\/habr.com\/ru\/articles\/853496\/\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u044b \u0442\u0430\u043c<\/a>. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u0441\u0435 \u0442\u043e\u0442 \u0436\u0435 RevealJS \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0444\u0444\u043b\u0430\u0439\u043d<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u043d\u043e \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u043e\u0434\u043e\u0431\u043d\u043e LaTeX Beamer<\/p>\n<\/li>\n<\/ol>\n<h3>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 JoyCon<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 <a href=\"https:\/\/github.com\/tomayac\/joy-con-webhid\" rel=\"noopener noreferrer nofollow\">joy-con-webhid<\/a>. \u0412\u0435\u0434\u044c \u0437\u0430\u0447\u0435\u043c \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0435\u0441\u043b\u0438 \u043b\u044e\u0434\u0438 \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0441\u0451 \u0437\u0430 \u043d\u0430\u0441<\/p>\n<pre><code class=\"bash\">npm install joy-con-webhid --prefix .<\/code><\/pre>\n<blockquote>\n<p>\u0412\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0437 WLJS Notebook. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Python + FAST API \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 JavaScript \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435, \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e JS. \u041e\u043d\u043b\u0430\u0439\u043d-\u0432\u0435\u0440\u0441\u0438\u044f \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/jerryi.github.io\/wljs-demo\/PresenterJoyCon.html\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043b\u0435\u0442\u0438\u0442 \u043a \u043d\u0430\u043c \u0441 \u043f\u043e\u0440\u0442\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">.esm  import { connectJoyCon, connectedJoyCons } from 'joy-con-webhid';  \/\/ Create connect button const connectButton = document.createElement('button'); connectButton.className = 'relative cursor-pointer rounded-md h-6 pl-3 pr-2 text-left text-gray-500 focus:outline-none ring-1 sm:text-xs sm:leading-6 bg-gray-100'; connectButton.innerText = \"Connect\";  let connectionState = \"Connect\"; let isJoyConConnected = false; let lastUpdateTime = performance.now(); let isAllowedToConnect = false;  \/\/ main handler function (warning! called at 60FPS) function handleJoyConInput(detail) {   const currentTime = performance.now();   if (currentTime - lastUpdateTime &gt; 50) { \/\/ slow down     lastUpdateTime = currentTime;      console.log(detail);   } }  \/\/ JoyCon periodically goes to sleep, we need to wake it up const connectionCheckInterval = setInterval(async () =&gt; {   if (!isAllowedToConnect) return;    const connectedDevices = connectedJoyCons.values();   isJoyConConnected = false;    for (const joyCon of connectedDevices) {     isJoyConConnected = true;     if (joyCon.eventListenerAttached) continue;      await joyCon.open();     await joyCon.enableStandardFullMode();     await joyCon.enableIMUMode();     await joyCon.enableVibration();     await joyCon.rumble(600, 600, 0.5);      joyCon.addEventListener('hidinput', ({ detail }) =&gt; handleJoyConInput(detail));     joyCon.eventListenerAttached = true;   }    updateConnectionState(); }, 2000);  \/\/ Update button state function updateConnectionState() {   if (isJoyConConnected &amp;&amp; connectionState !== \"Connected\") {     connectionState = \"Connected\";     connectButton.innerText = connectionState;     connectButton.style.background = '#d8ffd8';   } else if (!isJoyConConnected &amp;&amp; connectionState !== \"Connect\") {     connectionState = \"Connect\";     connectButton.innerText = connectionState;     connectButton.style.background = '';   } }  \/\/ Handle click event connectButton.addEventListener('click', async () =&gt; {   isAllowedToConnect = true;   if (!isJoyConConnected) {     await connectJoyCon();   } });  \/\/ Just decorations const container = document.createElement('div'); container.innerHTML = `&lt;small&gt;Presenter controller&lt;\/small&gt;`; container.appendChild(connectButton); container.className = 'flex flex-col gap-y-2 bg-white rounded-md shadow-md';  \/\/ Return DOM element to the page this.return(container);  \/\/ When a cell got removed this.ondestroy(() =&gt; {   cancelInterval(connectionCheckInterval); });<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f<\/p>\n<pre><code class=\"javascript\">function handleJoyConInput(detail) {   const currentTime = performance.now();   if (currentTime - lastUpdateTime &gt; 50) { \/\/ slow down     lastUpdateTime = currentTime;      console.log(detail); \/\/output to the console   } }<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u043e\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u201cConnect\u201d. \u041d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u2014 \u0438\u0445 \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0442\u0435, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>this.return(dom)<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 <code>DOMElement<\/code> \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443<\/p>\n<\/li>\n<li>\n<p><code>this.ondestroy(function)<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>function<\/code> \u0435\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0443 \u0443\u0434\u0430\u043b\u0438\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0438 \u0442.\u043f.<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 <code>.esm<\/code> \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 Javascript \u0432 WLJS Notebook, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 <em>\u0431\u0430\u043d\u0434\u043b\u0438\u043d\u0433<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u0443 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0441 \u043a\u043e\u0434\u043e\u043c, \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 DOM<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442:<\/p>\n<p>1.\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0442 Nintendo Switch (System \u2192 Controllers \u2192 Disconnect).<\/p>\n<p>2.\u0421\u043f\u0430\u0440\u0438\u0442\u044c JoyCon (R) \u0441 \u041f\u041a, \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f \u043c\u0435\u043b\u043a\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u0431\u043e\u043a\u0443.<\/p>\n<p>3.\u041d\u0430\u0436\u0430\u0442\u044c \u201cConnect\u201d \u043d\u0430 \u043d\u0430\u0448\u0435\u043c presenter controller.<\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"json\">{     \"buttonStatus\": {         \"y\": false,         \"x\": false,         \"b\": false,         \"a\": false,         \"r\": false,         \"zr\": false,         \"sr\": false,         \"sl\": false,         \"plus\": false,<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-457292","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/457292","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=457292"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/457292\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=457292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=457292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=457292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}