แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒแƒ› แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ˜แƒšแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก แƒ“แƒ แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— Node.js แƒ“แƒ แƒ•แƒ”แƒ‘ แƒ›แƒ”แƒขแƒงแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก API. Copter - Parrot ARDrone 2.0.

แƒจแƒ”แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ—: "Habr"-แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒคแƒแƒกแƒ“แƒแƒ™แƒšแƒ”แƒ‘แƒ 10 แƒ แƒฃแƒ‘แƒšแƒ˜แƒ“แƒแƒœ Skillbox-แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ™แƒฃแƒ แƒกแƒ–แƒ” แƒฉแƒแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒกแƒแƒก "Habr" แƒกแƒแƒ แƒ”แƒ™แƒšแƒแƒ›แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—: แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ™แƒฃแƒ แƒกแƒ˜ "Mobile Developer PRO".

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜

แƒ“แƒ แƒแƒœแƒ”แƒ‘แƒ˜ แƒกแƒแƒแƒชแƒแƒ แƒ˜แƒ. แƒ›แƒ” แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒก แƒฉแƒ”แƒ›แƒก แƒ™แƒ•แƒแƒ“แƒ แƒแƒกแƒ—แƒแƒœ แƒ—แƒแƒ›แƒแƒจแƒ˜, แƒคแƒแƒขแƒแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ•แƒ˜แƒ“แƒ”แƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฆแƒ”แƒ‘แƒ แƒแƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ แƒ—แƒแƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒžแƒ˜แƒšแƒแƒขแƒ แƒกแƒแƒคแƒ แƒ”แƒœแƒ˜ แƒแƒžแƒแƒ แƒแƒขแƒ”แƒ‘แƒ˜ (UAVs) แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒ แƒ—แƒแƒ‘แƒแƒ“. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ”แƒœ แƒ™แƒ˜แƒœแƒแƒจแƒ˜, แƒกแƒฌแƒแƒ•แƒšแƒแƒ‘แƒ”แƒœ แƒ›แƒงแƒ˜แƒœแƒ•แƒแƒ แƒ”แƒ‘แƒก แƒ“แƒ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒกแƒแƒ›แƒฎแƒ”แƒ“แƒ แƒแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒแƒ’แƒ แƒแƒ แƒฃแƒšแƒ˜ แƒกแƒ”แƒฅแƒขแƒแƒ แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ›แƒแƒ“แƒ’แƒ”แƒœแƒšแƒ”แƒ‘แƒ˜.

แƒแƒ› แƒขแƒฃแƒขแƒแƒ แƒ˜แƒแƒšแƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— แƒ›แƒแƒ แƒ—แƒแƒ— แƒ“แƒ แƒแƒœแƒ˜. แƒฎแƒ›แƒแƒ•แƒแƒœแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒ˜แƒแƒฎ, แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒ˜ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ˜แƒ›แƒแƒก, แƒ แƒแƒกแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ”แƒขแƒงแƒ•แƒ˜แƒ—. แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก แƒแƒ แƒ˜แƒก แƒ›แƒ–แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ“แƒ แƒ•แƒ˜แƒ“แƒ”แƒ แƒฃแƒžแƒ˜แƒšแƒแƒขแƒ แƒกแƒแƒคแƒ แƒ”แƒœแƒ˜ แƒแƒžแƒแƒ แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒ แƒ™แƒ˜แƒœแƒ˜แƒก

แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:

  • แƒ—แƒฃแƒ—แƒ˜แƒงแƒฃแƒจแƒ˜ ARDrone 2.0;
  • Ethernet แƒ™แƒแƒ‘แƒ”แƒšแƒ˜;
  • แƒ™แƒแƒ แƒ’แƒ˜ แƒ›แƒ˜แƒ™แƒ แƒแƒคแƒแƒœแƒ˜.

แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒ แƒ—แƒ•แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ Windows/Mac/Ubuntu-แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒ”แƒ‘แƒ–แƒ”. แƒžแƒ˜แƒ แƒแƒ“แƒแƒ“ แƒ›แƒ” แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ˜ Mac-แƒ—แƒแƒœ แƒ“แƒ Ubuntu 18.04-แƒ—แƒแƒœ.

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ

แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— Node.js-แƒ˜แƒก แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒ˜แƒขแƒ˜.

แƒแƒกแƒ”แƒ•แƒ” แƒกแƒแƒญแƒ˜แƒ แƒแƒ Google Chrome-แƒ˜แƒก แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ.

แƒ™แƒแƒžแƒขแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒ

แƒจแƒ”แƒ•แƒ”แƒชแƒแƒ“แƒแƒ— แƒ’แƒแƒ•แƒ˜แƒ’แƒแƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ—แƒฃแƒ—แƒ˜แƒงแƒฃแƒจแƒ˜ ARDrone. แƒแƒ› แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒก แƒแƒฅแƒ•แƒก แƒแƒ—แƒฎแƒ˜ แƒซแƒ แƒแƒ•แƒ.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ แƒซแƒ แƒแƒ•แƒ”แƒ‘แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ”แƒœ แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒ”แƒ แƒ—แƒ˜ แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜ แƒ‘แƒ แƒฃแƒœแƒแƒ•แƒก แƒกแƒแƒแƒ—แƒ˜แƒก แƒ˜แƒกแƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒ”แƒแƒ แƒ” แƒ™แƒ˜ แƒกแƒแƒแƒ—แƒ˜แƒก แƒ˜แƒกแƒ แƒ˜แƒก แƒกแƒแƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒแƒ“. แƒ“แƒ แƒแƒœแƒ˜ แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒก แƒ“แƒ”แƒ“แƒแƒ›แƒ˜แƒฌแƒ˜แƒก แƒ–แƒ”แƒ“แƒแƒžแƒ˜แƒ แƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒฎแƒ แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ™แƒฃแƒ—แƒฎแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ—, แƒซแƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ แƒฃแƒœแƒ•แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ— แƒ“แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒฎแƒ•แƒ แƒ›แƒแƒœแƒ”แƒ•แƒ แƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜ แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ˜แƒ—.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒแƒ–แƒ” แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒกแƒžแƒ˜แƒšแƒ”แƒœแƒซแƒ˜แƒก แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒแƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒ แƒชแƒฎแƒ”แƒœแƒ แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒœแƒ แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ แƒฃแƒœแƒ•แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒ แƒแƒœ แƒ’แƒแƒ–แƒ แƒ“แƒ แƒฅแƒ›แƒœแƒ˜แƒก แƒ แƒแƒšแƒก. แƒ”แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ“แƒ แƒแƒœแƒก แƒ˜แƒคแƒ แƒ˜แƒœแƒแƒก แƒฌแƒ˜แƒœ แƒแƒœ แƒฃแƒ™แƒแƒœ.

แƒซแƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ“แƒแƒฎแƒ แƒ˜แƒก แƒ™แƒฃแƒ—แƒฎแƒ”แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ™แƒแƒžแƒขแƒ”แƒ แƒก แƒ’แƒแƒ“แƒแƒแƒ“แƒ’แƒ˜แƒšแƒ“แƒ”แƒก แƒกแƒฎแƒ•แƒ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒแƒ”แƒ แƒแƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒ™แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒ”แƒกแƒ›แƒแƒ“แƒ”แƒ— แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒ”แƒ‘แƒ˜.

แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ—แƒฃแƒ—แƒ˜แƒงแƒฃแƒจแƒ˜ ARDrone

แƒ“แƒ แƒแƒœแƒ˜ แƒแƒ แƒ˜แƒก Wi-Fi-แƒ˜แƒก แƒชแƒฎแƒ”แƒšแƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜. แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ“แƒ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ‘แƒแƒ แƒขแƒ–แƒ”, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ”แƒ— แƒแƒ› แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒก. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒแƒ แƒ—แƒแƒ— แƒ™แƒ•แƒแƒ“แƒ™แƒแƒžแƒขแƒ”แƒ แƒ”แƒ‘แƒ˜. แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒ˜ แƒ“แƒ แƒแƒœแƒ˜ แƒจแƒ”แƒ”แƒ แƒ—แƒ“แƒ”แƒ‘แƒ, แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ˜แƒ— แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒ˜ แƒ“แƒ แƒขแƒ”แƒšแƒœแƒ”แƒขแƒ˜ 192.168.1.1 - แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ™แƒแƒžแƒขแƒ”แƒ แƒ˜แƒก IP. Linux-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— Linux Busybox.

แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ

แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒแƒ“:

  • แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜ แƒ›แƒ”แƒขแƒงแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก API-แƒ˜แƒ— แƒฎแƒ›แƒ˜แƒก แƒแƒ›แƒแƒชแƒœแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก;
  • แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ•แƒ แƒ แƒ“แƒ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ;
  • แƒ“แƒ แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ;
  • แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ แƒ•แƒ˜แƒ“แƒ”แƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ.

API แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒ˜. แƒแƒ›แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— Ethernet แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒก.

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ“แƒ แƒแƒ!

แƒ™แƒแƒ“แƒ˜

แƒฏแƒ”แƒ  แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒ›แƒแƒกแƒ–แƒ” แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— Node แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒก.

npm แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒโ€Š

แƒฉแƒ•แƒ”แƒœ แƒ›แƒฎแƒแƒ แƒก แƒ•แƒฃแƒญแƒ”แƒ แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก:

  • แƒแƒคแƒ แƒ”แƒœแƒ;
  • แƒกแƒแƒ“แƒ”แƒกแƒแƒœแƒขแƒ;
  • แƒ–แƒ”แƒ•แƒ˜แƒ— - แƒ“แƒ แƒแƒœแƒ˜ แƒแƒ“แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ— แƒ“แƒ แƒชแƒฃแƒ แƒแƒ•แƒก;
  • แƒฅแƒ•แƒ”แƒ›แƒแƒ— - แƒ”แƒชแƒ”แƒ›แƒ แƒœแƒแƒฎแƒ”แƒ•แƒแƒ  แƒ›แƒ”แƒขแƒ แƒ–แƒ” แƒ“แƒ แƒ˜แƒงแƒ˜แƒœแƒ”แƒ‘แƒ;
  • แƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ• - แƒ›แƒ˜แƒ“แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜ แƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ•;
  • แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ• - แƒ›แƒ˜แƒ“แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜ แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ•;
  • แƒ แƒแƒขแƒแƒชแƒ˜แƒ - แƒ‘แƒ แƒฃแƒœแƒแƒ•แƒก แƒกแƒแƒแƒ—แƒ˜แƒก แƒ˜แƒกแƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ— 90 แƒ’แƒ แƒแƒ“แƒฃแƒกแƒ˜แƒ—;
  • แƒฌแƒ˜แƒœ - แƒฌแƒ˜แƒœ แƒ›แƒ˜แƒ“แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ—;
  • แƒฃแƒ™แƒแƒœ - แƒ›แƒ˜แƒ“แƒ˜แƒก แƒฃแƒ™แƒแƒœ แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒ—;
  • แƒ’แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒ.

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ แƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ“แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒแƒ— แƒ“แƒ แƒแƒœแƒ˜.

const express = require('express');
const bodyparser = require('body-parser');
var arDrone = require('ar-drone');
const router = express.Router();
const app = express();
const commands = ['takeoff', 'land','up','down','goleft','goright','turn','goforward','gobackward','stop'];
 
var drone  = arDrone.createClient();
// disable emergency
drone.disableEmergency();
// express
app.use(bodyparser.json());
app.use(express.static(__dirname + '/public'));
 
router.get('/',(req,res) => {
    res.sendFile('index.html');
});
 
router.post('/command',(req,res) => {
    console.log('command recieved ', req.body);
    console.log('existing commands', commands);
    let command = req.body.command.replace(/ /g,'');
    if(commands.indexOf(command) !== -1) {
        switch(command.toUpperCase()) {
            case "TAKEOFF":
                console.log('taking off the drone');
                drone.takeoff();
            break;
            case "LAND":
                console.log('landing the drone');
                drone.land();
            break;
            case "UP":
                console.log('taking the drone up half meter');
                drone.up(0.2);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "DOWN":
                console.log('taking the drone down half meter');
                drone.down(0.2);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOLEFT":
                console.log('taking the drone left 1 meter');
                drone.left(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },1000);
            break;
            case "GORIGHT":
                console.log('taking the drone right 1 meter');
                drone.right(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },1000);
            break;
            case "TURN":
                console.log('turning the drone');
                drone.clockwise(0.4);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOFORWARD":
                console.log('moving the drone forward by 1 meter');
                drone.front(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOBACKWARD":
                console.log('moving the drone backward 1 meter');
                drone.back(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "STOP":
                drone.stop();
            break;
            default:
            break;    
        }
    }
    res.send('OK');
});
 
app.use('/',router);
 
app.listen(process.env.port || 3000);

แƒ“แƒ แƒแƒฅ แƒแƒ แƒ˜แƒก HTML แƒ“แƒ JavaScript แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒกแƒ›แƒ”แƒœแƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ“แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก Node แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.

<!DOCTYPE html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Voice Controlled Notes App</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/shoelace-css/1.0.0-beta16/shoelace.css">
        <link rel="stylesheet" href="styles.css">
 
    </head>
    <body>
        <div class="container">
 
            <h1>Voice Controlled Drone</h1>
            <p class="page-description">A tiny app that allows you to control AR drone using voice</p>
 
            <h3 class="no-browser-support">Sorry, Your Browser Doesn't Support the Web Speech API. Try Opening This Demo In Google Chrome.</h3>
 
            <div class="app">
                <h3>Give the command</h3>
                <div class="input-single">
                    <textarea id="note-textarea" placeholder="Create a new note by typing or using voice recognition." rows="6"></textarea>
                </div>    
                <button id="start-record-btn" title="Start Recording">Start Recognition</button>
                <button id="pause-record-btn" title="Pause Recording">Pause Recognition</button>
                <p id="recording-instructions">Press the <strong>Start Recognition</strong> button and allow access.</p>
 
            </div>
 
        </div>
 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script src="script.js"></script>
 
    </body>
</html>

แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” JavaScript แƒ™แƒแƒ“แƒ˜ แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ Node แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.

try {
 var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
 var recognition = new SpeechRecognition();
 }
 catch(e) {
 console.error(e);
 $('.no-browser-support').show();
 $('.app').hide();
 }
// other code, please refer GitHub source
recognition.onresult = function(event) {
// event is a SpeechRecognitionEvent object.
// It holds all the lines we have captured so far.
 // We only need the current one.
 var current = event.resultIndex;
// Get a transcript of what was said.
var transcript = event.results[current][0].transcript;
// send it to the backend
$.ajax({
 type: 'POST',
 url: '/command/',
 data: JSON.stringify({command: transcript}),
 success: function(data) { console.log(data) },
 contentType: "application/json",
 dataType: 'json'
 });
};

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒœแƒแƒ˜แƒ แƒแƒ“ (แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ™แƒแƒžแƒขแƒ”แƒ แƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Wi-Fi-แƒ—แƒแƒœ แƒ“แƒ Ethernet แƒ™แƒแƒ‘แƒ”แƒšแƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ—แƒแƒœ).

แƒ’แƒแƒฎแƒกแƒ”แƒœแƒ˜แƒ— localhost:3000 แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ แƒ“แƒ แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— Start Recognition-แƒก.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ— แƒ“แƒ แƒแƒœแƒ˜ แƒ’แƒแƒ•แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒแƒ— แƒ“แƒ แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ•แƒแƒ แƒ—.

แƒ•แƒ˜แƒ“แƒ”แƒแƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ“แƒ แƒแƒœแƒ˜แƒ“แƒแƒœ

แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ— แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒ˜แƒฅ:

const http = require("http");
const drone = require("dronestream");
 
const server = http.createServer(function(req, res) {
 
require("fs").createReadStream(__dirname + "/public/video.html").pipe(res);
 });
 
drone.listen(server);
 
server.listen(4000);

แƒ“แƒ แƒแƒฅ แƒแƒ แƒ˜แƒก HTML แƒ™แƒแƒ“แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒก แƒ•แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ— แƒกแƒแƒฏแƒแƒ แƒ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜.

<!doctype html>
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title>Stream as module</title>
 <script src="/dronestream/nodecopter-client.js" type="text/javascript" charset="utf-8"></script>
 </head>
 <body>
 <h1 id="heading">Drone video stream</h1>
 <div id="droneStream" style="width: 640px; height: 360px"> </div>
 
<script type="text/javascript" charset="utf-8">
 
new NodecopterStream(document.getElementById("droneStream"));
 
</script>
 
</body>
</html>

แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒ“แƒ แƒ“แƒแƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ˜แƒ— localhost:8080-แƒก, แƒ แƒแƒ› แƒœแƒแƒฎแƒแƒ— แƒ•แƒ˜แƒ“แƒ”แƒ แƒฌแƒ˜แƒœแƒ แƒ™แƒแƒ›แƒ”แƒ แƒ˜แƒ“แƒแƒœ.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ— แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒฎแƒ›แƒแƒ•แƒแƒœ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒก Node.js-แƒ˜แƒกแƒ แƒ“แƒ ARDrone-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ แƒฉแƒ”แƒ•แƒ”แƒ‘แƒ˜

  • แƒ˜แƒคแƒ แƒ˜แƒœแƒ”แƒ— แƒ”แƒก แƒ“แƒ แƒแƒœแƒ˜ แƒจแƒ”แƒœแƒแƒ‘แƒแƒจแƒ˜.
  • แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒ˜แƒ“แƒ”แƒ— แƒ“แƒแƒ›แƒชแƒแƒ•แƒ˜ แƒกแƒแƒคแƒแƒ แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ“แƒ แƒแƒœแƒก แƒแƒคแƒ แƒ”แƒœแƒแƒ›แƒ“แƒ”.
  • แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒ‘แƒแƒขแƒแƒ แƒ”แƒ แƒ“แƒแƒขแƒ”แƒœแƒฃแƒšแƒ˜แƒ แƒ—แƒฃ แƒแƒ แƒ.
  • แƒ—แƒฃ แƒ“แƒ แƒแƒœแƒ˜ แƒฃแƒชแƒœแƒแƒฃแƒ แƒแƒ“ แƒ˜แƒฅแƒชแƒ”แƒ•แƒ, แƒ“แƒแƒ˜แƒญแƒ˜แƒ แƒ”แƒ— แƒ“แƒ แƒ’แƒแƒ“แƒแƒแƒขแƒ แƒ˜แƒแƒšแƒ”แƒ—. แƒ”แƒก แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ•แƒ”แƒ แƒขแƒ›แƒคแƒ แƒ”แƒœแƒก แƒ’แƒแƒ“แƒแƒฃแƒ“แƒ”แƒ‘แƒ”แƒš แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ แƒ“แƒ แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒ’แƒแƒฉแƒ”แƒ แƒ“แƒ”แƒ‘แƒ.

แƒ›แƒ–แƒ แƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒ“แƒ”แƒ›แƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ

LIVE แƒ“แƒ”แƒ›แƒ

DOWNLOAD

แƒ›แƒแƒฎแƒ“แƒ!

แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒœแƒฅแƒแƒœแƒ˜แƒก แƒ“แƒแƒ›แƒแƒ แƒฉแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒแƒก แƒ›แƒแƒ’แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒ—! แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒแƒ แƒ™แƒ•แƒ˜แƒ”แƒ—, แƒ แƒแƒ’แƒแƒ  แƒ•แƒแƒกแƒฌแƒแƒ•แƒšแƒแƒ— แƒ—แƒ•แƒ˜แƒ—แƒ›แƒคแƒ แƒ˜แƒœแƒแƒ•แƒก แƒฎแƒ›แƒแƒ•แƒแƒœแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ. แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ”แƒขแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒ: แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒก แƒแƒ›แƒแƒชแƒœแƒแƒ‘แƒ, แƒแƒ•แƒขแƒแƒœแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒคแƒ แƒ”แƒœแƒ”แƒ‘แƒ˜, แƒŸแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒชแƒœแƒแƒ‘แƒ แƒ“แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒกแƒฎแƒ•แƒ.

แƒ แƒแƒก แƒ›แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“?

Skillbox แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ