ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช: 10 ืขืงืจื•ื ื•ืช ืขื™ืฆื•ื‘

ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช: 10 ืขืงืจื•ื ื•ืช ืขื™ืฆื•ื‘

ื›ื™ื•ื ื ื•ืฆืจื™ื ืžื“ื™ ื™ื•ื ืฉื™ืจื•ืชื™ื ื—ื“ืฉื™ื, ืืคืœื™ืงืฆื™ื•ืช ื•ืชื•ื›ื ื•ืช ื—ืฉื•ื‘ื•ืช ืื—ืจื•ืช ื”ืžืืคืฉืจื•ืช ืœื™ืฆื•ืจ ื“ื‘ืจื™ื ืžื“ื”ื™ืžื™ื: ืžืชื•ื›ื ื” ืœืฉืœื™ื˜ื” ืขืœ ืจืงื˜ืช SpaceX ื•ืขื“ ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ืงื•ืžืงื•ื ื‘ื—ื“ืจ ื”ืกืžื•ืš ื“ืจืš ื”ืกืžืืจื˜ืคื•ืŸ.

ื•ืœืคืขืžื™ื, ื›ืœ ืžืชื›ื ืช ืžืชื—ื™ืœ, ื‘ื™ืŸ ืื ื”ื•ื ืกื˜ืืจื˜-ืืค ื ืœื”ื‘ ืื• Full Stack ืื• Data Scientist ืจื’ื™ืœ, ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืžื’ื™ืข ืœื”ื‘ื ื” ืฉื™ืฉ ื›ืœืœื™ื ืžืกื•ื™ืžื™ื ืœืชื›ื ื•ืช ื•ื™ืฆื™ืจืช ืชื•ื›ื ื” ืฉืžืคืฉื˜ื™ื ืžืื•ื“ ืืช ื”ื—ื™ื™ื.

ื‘ืžืืžืจ ื–ื”, ืืชืืจ ื‘ืงืฆืจื” 10 ืขืงืจื•ื ื•ืช ื›ื™ืฆื“ ืœืชื›ื ืช ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช ื›ืš ืฉื ื™ืชืŸ ื™ื”ื™ื” ืœืฉืœื‘ ืื•ืชื” ื‘ืงืœื•ืช ื‘ืืคืœื™ืงืฆื™ื”/ืฉื™ืจื•ืช, ื‘ื”ืชื‘ืกืก ืขืœ ืžืชื•ื“ื•ืœื•ื’ื™ื™ืช 12 ื’ื•ืจืžื™ ื”ืืคืœื™ืงืฆื™ื”. ื”ื•ืฆืข ืขืœ ื™ื“ื™ ืฆื•ื•ืช Heroku. ื”ื™ื•ื–ืžื” ืฉืœื™ ื”ื™ื ืœื”ื’ื‘ื™ืจ ืืช ื”ืžื•ื“ืขื•ืช ืœื˜ื›ื ื™ืงื” ื”ื–ื•, ืฉื™ื›ื•ืœื” ืœืขื–ื•ืจ ืœืžืคืชื—ื™ื ืจื‘ื™ื ื•ืœืื ืฉื™ ืžื“ืขื™ ื”ื ืชื•ื ื™ื.

ืžืืžืจ ื–ื” ื”ื•ื ืคืจื•ืœื•ื’ ืœืกื“ืจืช ืžืืžืจื™ื ืขืœ ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช. ื‘ื”ื ืื“ื‘ืจ ืขื•ื“ ืขืœ ืื™ืš ื‘ืขืฆื ืœืขืฉื•ืช ืžื•ื“ืœ ื•ืœื”ืฉื™ืง ืื•ืชื• ืœื™ื™ืฆื•ืจ, ืœื™ืฆื•ืจ ืขื‘ื•ืจื• API, ื•ื›ืŸ ื“ื•ื’ืžืื•ืช ืžืชื—ื•ืžื™ื ื•ื—ื‘ืจื•ืช ืฉื•ื ื•ืช ืฉื™ืฉ ืœื”ื ML ืžื•ื‘ื ื” ื‘ืžืขืจื›ื•ืช ืฉืœื”ื.

ืขืงืจื•ืŸ 1: ื‘ืกื™ืก ืงื•ื“ ืื—ื“

ื™ืฉ ืžืชื›ื ืชื™ื ื‘ืฉืœื‘ื™ื ื”ืจืืฉื•ื ื™ื, ืžืชื•ืš ืขืฆืœื•ืช ืœื”ื‘ื™ืŸ ืืช ื–ื” (ืื• ืžืกื™ื‘ื” ืžืฉืœื”ื), ืฉื•ื›ื—ื™ื ืž-Git. ืื• ืฉื”ื ืฉื•ื›ื—ื™ื ืœื’ืžืจื™ ืืช ื”ืžื™ืœื”, ื›ืœื•ืžืจ, ื”ื ื–ื•ืจืงื™ื ืงื‘ืฆื™ื ื–ื” ืœื–ื” ื‘ื›ื•ื ืŸ/ืคืฉื•ื˜ ื–ื•ืจืงื™ื ื˜ืงืกื˜/ืฉื•ืœื—ื™ื ืขืœ ื™ื“ื™ ื™ื•ื ื™ื, ืื• ืฉื”ื ืœื ื—ื•ืฉื‘ื™ื ืขืœ ืชื”ืœื™ืš ื”ืขื‘ื•ื“ื” ืฉืœื”ื, ื•ืžืชื—ื™ื™ื‘ื™ื ื›ืœ ืื—ื“ ืœืขื ืฃ ืฉืœื•, ื•ืื– ืœ- ืœึดืฉืึฐืœื•ึนื˜.

ืขืงืจื•ืŸ ื–ื” ืงื•ื‘ืข: ื™ืฉ ื‘ืกื™ืก ืงื•ื“ ืื—ื“ ื•ื”ืจื‘ื” ืคืจื™ืกื•ืช.

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-Git ื”ืŸ ื‘ื™ื™ืฆื•ืจ ื•ื”ืŸ ื‘ืžื—ืงืจ ื•ืคื™ืชื•ื— (R&D), ื‘ื”ื ืœื ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ ื›ืœ ื›ืš ื”ืจื‘ื”.

ืœื“ื•ื’ืžื”, ื‘ืฉืœื‘ ื”ืžื•"ืค ืืชื” ื™ื›ื•ืœ ืœื”ืฉืื™ืจ ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ืขื ืฉื™ื˜ื•ืช ื•ืžื•ื“ืœื™ื ืฉื•ื ื™ื ืฉืœ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื, ื›ื“ื™ ืœื‘ื—ื•ืจ ืืช ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ื•ืœื”ืžืฉื™ืš ื‘ืงืœื•ืช ืœืขื‘ื•ื“ ืื™ืชื• ื”ืœืื”.

ืฉื ื™ืช, ื‘ื™ื™ืฆื•ืจ ื–ื” ื“ื‘ืจ ืฉืื™ืŸ ืœื• ืชื—ืœื™ืฃ - ืชืฆื˜ืจื›ื• ืœื”ืกืชื›ืœ ื›ืœ ื”ื–ืžืŸ ืื™ืš ื”ืงื•ื“ ืฉืœื›ื ืžืฉืชื ื” ื•ืœื“ืขืช ืื™ื–ื” ื“ื’ื ื”ื‘ื™ื ืืช ื”ืชื•ืฆืื•ืช ื”ื˜ื•ื‘ื•ืช ื‘ื™ื•ืชืจ, ืื™ื–ื” ืงื•ื“ ืขื‘ื“ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื•ืžื” ืงืจื” ืฉื’ืจื ืœื• ืœื”ืคืกื™ืง ืœืขื‘ื•ื“ ืื• ืœื”ืชื—ื™ืœ ืœื™ื™ืฆืจ ืชื•ืฆืื•ืช ืœื ื ื›ื•ื ื•ืช . ื‘ืฉื‘ื™ืœ ื–ื” ื™ืฉ ืžื—ื•ื™ื‘ื•ืช!

ืืชื” ื™ื›ื•ืœ ื’ื ืœื™ืฆื•ืจ ื—ื‘ื™ืœื” ืฉืœ ื”ืคืจื•ื™ืงื˜ ืฉืœืš, ืœืžืงื ืื•ืชื•, ืœืžืฉืœ, ืขืœ Gemfury, ื•ืื– ืคืฉื•ื˜ ืœื™ื™ื‘ื ืžืžื ื• ืคื•ื ืงืฆื™ื•ืช ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ื™ื ืื—ืจื™ื, ื›ื“ื™ ืœื ืœืฉื›ืชื‘ ืื•ืชื 1000 ืคืขืžื™ื, ืืœื ืขืœ ื›ืš ื‘ื”ืžืฉืš.

ืขืงืจื•ืŸ 2: ื”ื›ืจื–ื” ื‘ืจื•ืจื” ื•ื‘ื™ื“ื•ื“ ืชืœื•ืช

ืœื›ืœ ืคืจื•ื™ืงื˜ ื™ืฉ ืกืคืจื™ื•ืช ืฉื•ื ื•ืช ืฉืืชื” ืžื™ื™ื‘ื ืžื‘ื—ื•ืฅ ื›ื“ื™ ืœื™ื™ืฉื ืื•ืชืŸ ื‘ืžืงื•ื ื›ืœืฉื”ื•. ื‘ื™ืŸ ืื ื–ื” ืกืคืจื™ื•ืช Python, ืื• ืกืคืจื™ื•ืช ืฉืœ ืฉืคื•ืช ืื—ืจื•ืช ืœืžื˜ืจื•ืช ืฉื•ื ื•ืช, ืื• ื›ืœื™ ืžืขืจื›ืช - ื”ืžืฉื™ืžื” ืฉืœืš ื”ื™ื:

  • ื”ื›ืจื™ื– ื‘ื‘ื™ืจื•ืจ ืขืœ ืชืœื•ืช, ื›ืœื•ืžืจ, ืงื•ื‘ืฅ ืฉื™ื›ื™ืœ ืืช ื›ืœ ื”ืกืคืจื™ื•ืช, ื”ื›ืœื™ื ื•ื”ื’ื™ืจืกืื•ืช ืฉืœื”ื ืฉื ืžืฆืื•ืช ื‘ืฉื™ืžื•ืฉ ื‘ืคืจื•ื™ืงื˜ ืฉืœืš ื•ืฉื™ืฉ ืœื”ืชืงื™ืŸ (ืœื“ื•ื’ืžื”, ื‘-Python ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืืžืฆืขื•ืช Pipfile ืื• requirements.txt. A ืงื™ืฉื•ืจ ื”ืžืืคืฉืจ ื˜ื•ื‘ ืœื”ื‘ื™ืŸ: realpython.com/pipenv-guide)
  • ืœื‘ื•ื“ื“ ืชืœื•ืช ืกืคืฆื™ืคื™ืช ืขื‘ื•ืจ ื”ืชื•ื›ื ื™ืช ืฉืœืš ื‘ืžื”ืœืš ื”ืคื™ืชื•ื—. ืืชื” ืœื ืจื•ืฆื” ืœืฉื ื•ืช ื›ืœ ื”ื–ืžืŸ ื’ืจืกืื•ืช ื•ืœื”ืชืงื™ืŸ ืžื—ื“ืฉ, ืœืžืฉืœ, ืืช Tensorflow?

ื›ืš, ืžืคืชื—ื™ื ืฉื™ืฆื˜ืจืคื• ืœืฆื•ื•ืช ืฉืœืš ื‘ืขืชื™ื“ ื™ื•ื›ืœื• ืœื”ื›ื™ืจ ื‘ืžื”ื™ืจื•ืช ืืช ื”ืกืคืจื™ื•ืช ื•ื”ื’ืจืกืื•ืช ืฉืœื”ืŸ ื”ืžืฉืžืฉื•ืช ื‘ืคืจื•ื™ืงื˜ ืฉืœืš, ื•ื’ื ืชื”ื™ื” ืœืš ื”ื–ื“ืžื ื•ืช ืœื ื”ืœ ืืช ื”ื’ืจืกืื•ืช ื•ื”ืกืคืจื™ื•ืช ืขืฆืžืŸ ื”ืžื•ืชืงื ื•ืช ืขื‘ื•ืจ ืกืคืฆื™ืคื™ืช ืคืจื•ื™ืงื˜, ืฉื™ืขื–ื•ืจ ืœืš ืœื”ื™ืžื ืข ืžื—ื•ืกืจ ืชืื™ืžื•ืช ืฉืœ ืกืคืจื™ื•ืช ืื• ื’ืจืกืื•ืช ืฉืœื”ืŸ.

ื”ื™ื™ืฉื•ื ืฉืœืš ื’ื ืœื ืฆืจื™ืš ืœื”ืกืชืžืš ืขืœ ื›ืœื™ ืžืขืจื›ืช ืฉืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ืžื•ืชืงื ื™ื ื‘ืžืขืจื›ืช ื”ืคืขืœื” ืกืคืฆื™ืคื™ืช. ื™ืฉ ืœื”ืฆื”ื™ืจ ืขืœ ื›ืœื™ื ืืœื• ื’ื ื‘ืžื ื™ืคืกื˜ ื”ืชืœื•ืช. ื–ื” ื”ื›ืจื—ื™ ืขืœ ืžื ืช ืœืžื ื•ืข ืžืฆื‘ื™ื ืฉื‘ื”ื ื’ืจืกืช ื”ื›ืœื™ื (ื›ืžื• ื’ื ื–ืžื™ื ื•ืชื) ืื™ื ื” ืชื•ืืžืช ืœื›ืœื™ ื”ืžืขืจื›ืช ืฉืœ ืžืขืจื›ืช ื”ืคืขืœื” ืžืกื•ื™ืžืช.

ืœืคื™ื›ืš, ื’ื ืื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-curl ื›ืžืขื˜ ื‘ื›ืœ ื”ืžื—ืฉื‘ื™ื, ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื”ืฆื”ื™ืจ ืขืœ ื›ืš ื‘ืชืœื•ืช, ืฉื›ืŸ ื‘ืขืช โ€‹โ€‹ื”ื’ื™ืจื” ืœืคืœื˜ืคื•ืจืžื” ืื—ืจืช ื™ื™ืชื›ืŸ ืฉื”ื•ื ืœื ื ืžืฆื ืฉื ืื• ืฉื”ื’ืจืกื” ืœื ืชื”ื™ื” ื–ื• ืฉื”ื™ื™ืช ืฆืจื™ื›ื” ื‘ืžืงื•ืจ.

ืœื“ื•ื’ืžื”, requirements.txt ืฉืœืš ืขืฉื•ื™ ืœื”ื™ืจืื•ืช ื›ืš:

# Model Building Requirements
numpy>=1.18.1,<1.19.0
pandas>=0.25.3,<0.26.0
scikit-learn>=0.22.1,<0.23.0
joblib>=0.14.1,<0.15.0

# testing requirements
pytest>=5.3.2,<6.0.0

# packaging
setuptools>=41.4.0,<42.0.0
wheel>=0.33.6,<0.34.0

# fetching datasets
kaggle>=1.5.6,<1.6.0

ืขืงืจื•ืŸ 3: ืชืฆื•ืจื•ืช

ืจื‘ื™ื ืฉืžืขื• ืกื™ืคื•ืจื™ื ืขืœ ืžืคืชื—ื™ื ืฉื•ื ื™ื ืฉื”ืขืœื• ื‘ื˜ืขื•ืช ืงื•ื“ ืœ-GitHub ืœืžืื’ืจื™ื ืฆื™ื‘ื•ืจื™ื™ื ืขื ืกื™ืกืžืื•ืช ื•ืžืคืชื—ื•ืช ืื—ืจื™ื ืž-AWS, ื•ื”ืชืขื•ืจืจื• ืœืžื—ืจืช ืขื ื—ื•ื‘ ืฉืœ $6000, ืื• ืืคื™ืœื• $50000.

ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช: 10 ืขืงืจื•ื ื•ืช ืขื™ืฆื•ื‘

ื›ืžื•ื‘ืŸ ืฉืžืงืจื™ื ืืœื• ื”ื ืงื™ืฆื•ื ื™ื™ื, ืืš ืžืฉืžืขื•ืชื™ื™ื ืžืื•ื“. ืื ืืชื” ืžืื—ืกืŸ ืืช ื”ืื™ืฉื•ืจื™ื ืฉืœืš ืื• ื ืชื•ื ื™ื ืื—ืจื™ื ื”ื“ืจื•ืฉื™ื ืœื”ื’ื“ืจื” ื‘ืชื•ืš ื”ืงื•ื“, ืืชื” ืขื•ืฉื” ื˜ืขื•ืช, ื•ืื ื™ ื—ื•ืฉื‘ ืฉืื™ืŸ ืฆื•ืจืš ืœื”ืกื‘ื™ืจ ืžื“ื•ืข.

ื—ืœื•ืคื” ืœื›ืš ื”ื™ื ืื—ืกื•ืŸ ืชืฆื•ืจื•ืช ื‘ืžืฉืชื ื™ ืกื‘ื™ื‘ื”. ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ืžืฉืชื ื™ ืกื‘ื™ื‘ื” ื›ืืŸ.

ื“ื•ื’ืžืื•ืช ืœื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ื“ืจืš ื›ืœืœ ื‘ืžืฉืชื ื™ ืกื‘ื™ื‘ื”:

  • ืฉืžื•ืช ืžืชื—ื
  • ื›ืชื•ื‘ื•ืช API/URI
  • ืžืคืชื—ื•ืช ืฆื™ื‘ื•ืจื™ื™ื ื•ืคืจื˜ื™ื™ื
  • ืื ืฉื™ ืงืฉืจ (ื“ื•ืืจ, ื˜ืœืคื•ื ื™ื ื•ื›ื•')

ื‘ื“ืจืš ื–ื• ืื™ื ืš ืฆืจื™ืš ืœืฉื ื•ืช ื›ืœ ื”ื–ืžืŸ ืืช ื”ืงื•ื“ ืื ืžืฉืชื ื™ ื”ืชืฆื•ืจื” ืฉืœืš ืžืฉืชื ื™ื. ื–ื” ื™ืขื–ื•ืจ ืœื—ืกื•ืš ืœืš ื–ืžืŸ, ืžืืžืฅ ื•ื›ืกืฃ.

ืœื“ื•ื’ืžื”, ืื ืืชื” ืžืฉืชืžืฉ ื‘-Kaggle API ืœื‘ื™ืฆื•ืข ื‘ื“ื™ืงื•ืช (ืœื“ื•ื’ืžื”, ื”ื•ืจื“ ืืช ื”ืชื•ื›ื ื” ื•ื”ืคืขืœ ืืช ื”ืžื•ื“ืœ ื“ืจื›ื” ื›ื“ื™ ืœื‘ื“ื•ืง ื‘ื–ืžืŸ ื”ืจื™ืฆื” ืฉื”ืžื•ื“ืœ ืขื•ื‘ื“ ื”ื™ื˜ื‘), ืื– ืžืคืชื—ื•ืช ืคืจื˜ื™ื™ื ืž-Kaggle, ื›ื’ื•ืŸ KAGGLE_USERNAME ื•-KAGGLE_KEY, ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžืื•ื—ืกืŸ ื‘ืžืฉืชื ื™ ืกื‘ื™ื‘ื”.

ืขืงืจื•ืŸ 4: ืฉื™ืจื•ืชื™ ืฆื“ ืฉืœื™ืฉื™

ื”ืจืขื™ื•ืŸ ื›ืืŸ ื”ื•ื ืœื™ืฆื•ืจ ืืช ื”ืชื•ื›ื ื™ืช ื‘ืฆื•ืจื” ื›ื–ื• ืฉืœื ื™ื”ื™ื” ื”ื‘ื“ืœ ื‘ื™ืŸ ืžืฉืื‘ื™ื ืžืงื•ืžื™ื™ื ืœืžืฉืื‘ื™ื ืฉืœ ืฆื“ ืฉืœื™ืฉื™ ืžื‘ื—ื™ื ืช ืงื•ื“. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœื—ื‘ืจ ื’ื MySQL ืžืงื•ืžื™ืช ื•ื’ื ืฉืœ ืฆื“ ืฉืœื™ืฉื™. ืื•ืชื• ื“ื‘ืจ ืœื’ื‘ื™ ืžืžืฉืงื™ API ืฉื•ื ื™ื ื›ื’ื•ืŸ ืžืคื•ืช Google ืื• API ืฉืœ Twitter.

ื›ื“ื™ ืœื”ืฉื‘ื™ืช ืฉื™ืจื•ืช ืฉืœ ืฆื“ ืฉืœื™ืฉื™ ืื• ืœื—ื‘ืจ ืื—ืจ, ืืชื” ืจืง ืฆืจื™ืš ืœืฉื ื•ืช ืืช ื”ืžืคืชื—ื•ืช ื‘ืชืฆื•ืจื” ื‘ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื”, ืขืœื™ื”ื ื“ื™ื‘ืจืชื™ ื‘ืคืกืงื” ืœืžืขืœื”.

ืื–, ืœืžืฉืœ, ื‘ืžืงื•ื ืœืฆื™ื™ืŸ ื‘ื›ืœ ืคืขื ืืช ื”ื ืชื™ื‘ ืœืงื‘ืฆื™ื ืขื ืžืขืจื›ื™ ื ืชื•ื ื™ื ื‘ืชื•ืš ื”ืงื•ื“, ืขื“ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ืช pathlib ื•ืœื”ื›ืจื™ื– ืขืœ ื”ื ืชื™ื‘ ืœืžืขืจื›ื™ ื”ื ืชื•ื ื™ื ื‘-config.py, ื›ืš ืฉืœื ืžืฉื ื” ื‘ืื™ื–ื” ืฉื™ืจื•ืช ืืชื” ืžืฉืชืžืฉ (ืขื‘ื•ืจ ืœื“ื•ื’ืžื”, CircleCI), ื”ืชื•ื›ื ื™ืช ื”ืฆืœื™ื—ื” ืœื’ืœื•ืช ืืช ื”ื ืชื™ื‘ ืœืžืขืจื›ื™ ื”ื ืชื•ื ื™ื ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ืžื‘ื ื” ืฉืœ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื”ื—ื“ืฉื” ื‘ืฉื™ืจื•ืช ื”ื—ื“ืฉ.

ืขืงืจื•ืŸ 5. ื‘ื ื™ื™ื”, ืฉื—ืจื•ืจ, ื–ืžืŸ ืจื™ืฆื”

ืื ืฉื™ื ืจื‘ื™ื ื‘ืžื“ืขื™ ื”ื ืชื•ื ื™ื ืžื•ืฆืื™ื ืฉื™ืžื•ืฉื™ ืœืฉืคืจ ืืช ื›ื™ืฉื•ืจื™ ื›ืชื™ื‘ืช ื”ืชื•ื›ื ื” ืฉืœื”ื. ืื ืื ื—ื ื• ืจื•ืฆื™ื ืฉื”ืชื•ื›ื ื™ืช ืฉืœื ื• ืชืชืจืกืง ืœืขืชื™ื ืจื—ื•ืงื•ืช ื›ื›ืœ ื”ืืคืฉืจ ื•ืชืขื‘ื•ื“ ืœืœื ืชืงืœื•ืช ืœืื•ืจืš ื–ืžืŸ ืจื‘ ื›ื›ืœ ื”ืืคืฉืจ, ืขืœื™ื ื• ืœื—ืœืง ืืช ืชื”ืœื™ืš ืฉื—ืจื•ืจ ื’ืจืกื” ื—ื“ืฉื” ืœ-3 ืฉืœื‘ื™ื:

  1. ืฉืœื‘ ืžื›ืœื•ืœื™ื. ืืชื” ื”ื•ืคืš ืืช ื”ืงื•ื“ ื”ื—ืฉื•ืฃ ืฉืœืš ืขื ืžืฉืื‘ื™ื ื‘ื•ื“ื“ื™ื ืœืžื” ืฉื ืงืจื ื—ื‘ื™ืœื” ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ืงื•ื“ ื•ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื. ื—ื‘ื™ืœื” ื–ื• ื ืงืจืืช ื”ืจื›ื‘ื”.
  2. ืฉืœื‘ ืฉื—ืจื•ืจ - ื›ืืŸ ืื ื• ืžื—ื‘ืจื™ื ืืช ื”ืชืฆื•ืจื” ืฉืœื ื• ืœื”ืจื›ื‘ื”, ืฉื‘ืœืขื“ื™ื” ืœื ื ื•ื›ืœ ืœืฉื—ืจืจ ืืช ื”ืชื•ื›ื ื™ืช ืฉืœื ื•. ื›ืขืช ืžื“ื•ื‘ืจ ื‘ืžื”ื“ื•ืจื” ืžื•ื›ื ื” ืœื—ืœื•ื˜ื™ืŸ ืœื”ืคืขืœื”.
  3. ื”ื‘ื ืžื’ื™ืข ื”ืฉืœื‘ ืœืจื•ืฅ. ื›ืืŸ ืื ื• ืžืฉื—ืจืจื™ื ืืช ื”ืืคืœื™ืงืฆื™ื” ืขืœ ื™ื“ื™ ื”ืคืขืœืช ื”ืชื”ืœื™ื›ื™ื ื”ื“ืจื•ืฉื™ื ืžื”ืฉื—ืจื•ืจ ืฉืœื ื•.

ืžืขืจื›ืช ื›ื–ื• ืœืฉื—ืจื•ืจ ื’ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ ืžื•ื“ืœ ืื• ื›ืœ ื”ืฆื™ื ื•ืจ ืžืืคืฉืจืช ืœื”ืคืจื™ื“ ื‘ื™ืŸ ืชืคืงื™ื“ื™ื ื‘ื™ืŸ ืžื ื”ืœื™ื ืœืžืคืชื—ื™ื, ืžืืคืฉืจืช ืœืขืงื•ื‘ ืื—ืจ ื’ืจืกืื•ืช ื•ืžื•ื ืขืช ืขืฆื™ืจื•ืช ืœื ืจืฆื•ื™ื•ืช ืฉืœ ื”ืชื•ื›ื ื™ืช.

ืขื‘ื•ืจ ืžืฉื™ืžืช ื”ืฉื—ืจื•ืจ, ื ื•ืฆืจื• ืฉื™ืจื•ืชื™ื ืจื‘ื™ื ื•ืฉื•ื ื™ื ืฉื‘ื”ื ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืชื”ืœื™ื›ื™ื ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ืขืฆืžืš ื‘ืงื•ื‘ืฅ .yml (ืœื“ื•ื’ืžื”, ื‘-CircleCI ื–ื” config.yml ื›ื“ื™ ืœืชืžื•ืš ื‘ืชื”ืœื™ืš ืขืฆืžื•). Wheely ื ื”ื“ืจ ื‘ื™ืฆื™ืจืช ื—ื‘ื™ืœื•ืช ืœืคืจื•ื™ืงื˜ื™ื.

ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ื—ื‘ื™ืœื•ืช ืขื ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ืžื•ื“ืœ ืœืžื™ื“ืช ื”ืžื›ื•ื ื” ืฉืœืš, ื•ืœืื—ืจ ืžื›ืŸ ืœืืจื•ื– ืื•ืชืŸ ื•ืœื”ืชื™ื™ื—ืก ืœื—ื‘ื™ืœื•ืช ื”ื“ืจื•ืฉื•ืช ื•ืœื’ืจืกืื•ืช ืฉืœื”ืŸ ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ืฉื›ืชื‘ืช ืžืฉื. ื–ื” ื™ืขื–ื•ืจ ืœืš ืœื™ืฆื•ืจ API ืขื‘ื•ืจ ื”ื“ื’ื ืฉืœืš, ื•ื ื™ืชืŸ ืœืืจื— ืืช ื”ื—ื‘ื™ืœื” ืฉืœืš ื‘- Gemfury, ืœืžืฉืœ.

ืขืงืจื•ืŸ 6. ื”ืคืขืœ ืืช ื”ืžื•ื“ืœ ืฉืœืš ื›ืชื”ืœื™ืš ืื—ื“ ืื• ื™ื•ืชืจ

ื™ืชืจื” ืžื›ืš, ืชื”ืœื™ื›ื™ื ืœื ืฆืจื™ื›ื™ื ืœื—ืœื•ืง ื ืชื•ื ื™ื. ื›ืœื•ืžืจ, ืชื”ืœื™ื›ื™ื ื—ื™ื™ื‘ื™ื ืœื”ืชืงื™ื™ื ื‘ื ืคืจื“, ื•ื›ืœ ืžื™ื ื™ ื ืชื•ื ื™ื ื—ื™ื™ื‘ื™ื ืœื”ืชืงื™ื™ื ื‘ื ืคืจื“, ืœืžืฉืœ ื‘ืฉื™ืจื•ืชื™ ืฆื“ ืฉืœื™ืฉื™ ื›ืžื• MySQL ืื• ืื—ืจื™ื, ืชืœื•ื™ ืžื” ืืชื” ืฆืจื™ืš.

ื›ืœื•ืžืจ, ื‘ื”ื—ืœื˜ ืœื ื›ื“ืื™ ืœืื—ืกืŸ ื ืชื•ื ื™ื ื‘ืชื•ืš ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœ ื”ืชื”ืœื™ืš, ืื—ืจืช ื–ื” ืขืœื•ืœ ืœื”ื•ื‘ื™ืœ ืœื ื™ืงื•ื™ ื”ื ืชื•ื ื™ื ื”ืœืœื• ื‘ืžื”ืœืš ื”ืฉื—ืจื•ืจ/ืฉื™ื ื•ื™ ื”ืชืฆื•ืจื•ืช ื”ื‘ื ืื• ื”ืขื‘ืจื” ืฉืœ ื”ืžืขืจื›ืช ืขืœื™ื” ื”ืชื•ื›ื ื™ืช ืคื•ืขืœืช.

ืื‘ืœ ื™ืฉ ื™ื•ืฆื ืžืŸ ื”ื›ืœืœ: ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ื™ื ืฉืœ ืœืžื™ื“ืช ืžื›ื•ื ื”, ืืชื” ื™ื›ื•ืœ ืœืื—ืกืŸ ืžื˜ืžื•ืŸ ืฉืœ ืกืคืจื™ื•ืช ื›ื“ื™ ืœื ืœื”ืชืงื™ืŸ ืื•ืชืŸ ืžื—ื“ืฉ ื‘ื›ืœ ืคืขื ืฉืืชื” ืžืฉื™ืง ื’ืจืกื” ื—ื“ืฉื”, ืื ืœื ื‘ื•ืฆืขื• ืกืคืจื™ื•ืช ื ื•ืกืคื•ืช ืื• ืฉื™ื ื•ื™ื™ื ื›ืœืฉื”ื ื‘ื’ืจืกืื•ืช ืฉืœื”ืŸ. ื›ืš ืชืคื—ื™ืช ืืช ื”ื–ืžืŸ ืฉืœื•ืงื— ืœื”ืฉื™ืง ืืช ื”ื“ื’ื ืฉืœืš ื‘ืชืขืฉื™ื™ื”.

ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืžื•ื“ืœ ื›ืžืกืคืจ ืชื”ืœื™ื›ื™ื, ื ื™ืชืŸ ืœื™ืฆื•ืจ ืงื•ื‘ืฅ .yml ื‘ื• ืชืฆื™ื™ืŸ ืืช ื”ืชื”ืœื™ื›ื™ื ื”ื“ืจื•ืฉื™ื ื•ืืช ื”ืจืฆืฃ ืฉืœื”ื.

ืขืงืจื•ืŸ 7: ื™ื›ื•ืœืช ืžื™ื—ื–ื•ืจ

ื”ืชื”ืœื™ื›ื™ื ื”ืคื•ืขืœื™ื ื‘ื™ื™ืฉื•ื ื”ืžื•ื“ืœ ืฉืœืš ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืงืœื™ื ืœื”ืคืขืœื” ื•ืœืขืฆื™ืจื”. ื›ืš, ื–ื” ื™ืืคืฉืจ ืœืš ืœืคืจื•ืก ื‘ืžื”ื™ืจื•ืช ืฉื™ื ื•ื™ื™ ืงื•ื“, ืฉื™ื ื•ื™ื™ ืชืฆื•ืจื”, ืงื ื” ืžื™ื“ื” ืžื”ื™ืจ ื•ื’ืžื™ืฉ, ื•ืœืžื ื•ืข ืชืงืœื•ืช ืืคืฉืจื™ื•ืช ืฉืœ ื’ืจืกืช ื”ืขื‘ื•ื“ื”.

ื›ืœื•ืžืจ, ื”ืชื”ืœื™ืš ืฉืœืš ืขื ื”ืžื•ื“ืœ ืฆืจื™ืš:

  • ืฆืžืฆื ืืช ื–ืžืŸ ื”ืืชื—ื•ืœ ืœืžื™ื ื™ืžื•ื. ื‘ืื•ืคืŸ ืื™ื“ื™ืืœื™, ื–ืžืŸ ื”ืืชื—ื•ืœ (ืžืจื’ืข ื”ื•ืฆืืช ืคืงื•ื“ืช ื”ืืชื—ื•ืœ ื•ืขื“ ืœืจื’ืข ื›ื ื™ืกืช ื”ืชื”ืœื™ืš) ืœื ืฆืจื™ืš ืœื”ื™ื•ืช ื™ื•ืชืจ ืžื›ืžื” ืฉื ื™ื•ืช. ืื—ืกื•ืŸ ื‘ืžื˜ืžื•ืŸ ืฉืœ ืกืคืจื™ื™ื”, ืฉืชื•ืืจ ืœืขื™ืœ, ื”ื•ื ื˜ื›ื ื™ืงื” ืื—ืช ืœื”ืคื—ืชืช ื–ืžืŸ ื”ืืชื—ื•ืœ.
  • ืกื™ื™ื ื ื›ื•ืŸ. ื›ืœื•ืžืจ, ื”ื”ืื–ื ื” ื‘ืคื•ืจื˜ ื”ืฉื™ืจื•ืช ืžื•ืฉืขื” ืœืžืขืฉื”, ื•ื‘ืงืฉื•ืช ื—ื“ืฉื•ืช ืฉื™ื•ื’ืฉื• ืœืคื•ืจื˜ ื–ื” ืœื ื™ื˜ื•ืคืœื•. ื›ืืŸ ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืชืงืฉื•ืจืช ื˜ื•ื‘ื” ืขื ืžื”ื ื“ืกื™ DevOps, ืื• ืœื”ื‘ื™ืŸ ืื™ืš ื–ื” ืขื•ื‘ื“ ื‘ืขืฆืžืš (ืจืฆื•ื™, ื›ืžื•ื‘ืŸ, ื”ืื—ืจื•ืŸ, ืื‘ืœ ืชืžื™ื“ ื™ืฉ ืœืฉืžื•ืจ ืขืœ ืชืงืฉื•ืจืช, ื‘ื›ืœ ืคืจื•ื™ืงื˜!)

ืขืงืจื•ืŸ 8: ืคืจื™ืกื” ืจืฆื™ืคื”/ืื™ื ื˜ื’ืจืฆื™ื”

ื—ื‘ืจื•ืช ืจื‘ื•ืช ืžืฉืชืžืฉื•ืช ื‘ื”ืคืจื“ื” ื‘ื™ืŸ ืฆื•ื•ืชื™ ื”ืคื™ืชื•ื— ื•ื”ืคืจื™ืกื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื” (ืžื” ืฉื”ื•ืคืš ืืช ื”ืืคืœื™ืงืฆื™ื” ืœื–ืžื™ื ื” ืœืžืฉืชืžืฉื™ ืงืฆื”). ื–ื” ื™ื›ื•ืœ ืœื”ืื˜ ืžืื•ื“ ืืช ืคื™ืชื•ื— ื”ืชื•ื›ื ื” ื•ื”ืชืงื“ืžื•ืช ื‘ืฉื™ืคื•ืจื”. ื–ื” ื’ื ืžืงืœืงืœ ืืช ืชืจื‘ื•ืช ื”-DevOps, ืฉื‘ื” ืคื™ืชื•ื— ื•ืื™ื ื˜ื’ืจืฆื™ื” ืžืฉื•ืœื‘ื™ื, ื‘ืื•ืคืŸ ื’ืก.

ืœื›ืŸ, ืขื™ืงืจื•ืŸ ื–ื” ืงื•ื‘ืข ืฉืกื‘ื™ื‘ืช ื”ืคื™ืชื•ื— ืฉืœืš ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืงืจื•ื‘ื” ื›ื›ืœ ื”ืืคืฉืจ ืœืกื‘ื™ื‘ืช ื”ื™ื™ืฆื•ืจ ืฉืœืš.

ื–ื” ื™ืืคืฉืจ:

  1. ืฆืžืฆื ืืช ื–ืžืŸ ื”ืฉื—ืจื•ืจ ื‘ืขืฉืจื•ืช ืžื•ื ื™ื
  2. ืฆืžืฆื ืืช ืžืกืคืจ ื”ืฉื’ื™ืื•ืช ืขืงื‘ ืื™ ืชืื™ืžื•ืช ืงื•ื“.
  3. ื–ื” ื’ื ืžืคื—ื™ืช ืืช ืขื•ืžืก ื”ืขื‘ื•ื“ื” ืขืœ ื”ืฆื•ื•ืช, ืžื›ื™ื•ื•ืŸ ืฉืžืคืชื—ื™ื ื•ืื ืฉื™ื ื”ืคื•ืจืกื™ื ืืช ื”ืืคืœื™ืงืฆื™ื” ื”ื ื›ืขืช ืฆื•ื•ืช ืื—ื“.

ื›ืœื™ื ื”ืžืืคืฉืจื™ื ืœืš ืœืขื‘ื•ื“ ืขื ื–ื” ื”ื CircleCI, Travis CI, GitLab CI ื•ืื—ืจื™ื.

ื ื™ืชืŸ ืœื‘ืฆืข ื‘ืžื”ื™ืจื•ืช ืชื•ืกืคื•ืช ืœื“ื’ื, ืœืขื“ื›ืŸ ืื•ืชื• ื•ืœื”ืคืขื™ืœ ืื•ืชื• ื‘ืื•ืคืŸ ืžื™ื™ื“ื™, ื›ืฉื‘ืžืงืจื” ืฉืœ ืชืงืœื•ืช ื™ื”ื™ื” ืงืœ ืœื—ื–ื•ืจ ืžื”ืจ ืžืื•ื“ ืœื’ืจืกืช ื”ืขื‘ื•ื“ื”, ื›ืš ืฉืžืฉืชืžืฉ ื”ืงืฆื” ืืคื™ืœื• ืœื ื™ื‘ื—ื™ืŸ ื‘ื›ืš. ื–ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ื‘ืงืœื•ืช ื•ื‘ืžื”ื™ืจื•ืช ื‘ืžื™ื•ื—ื“ ืื ื™ืฉ ืœืš ืžื‘ื—ื ื™ื ื˜ื•ื‘ื™ื.

ืฆืžืฆื ื”ื‘ื“ืœื™ื!!!

ืขืงืจื•ืŸ 9. ื”ื™ื•ืžื ื™ื ืฉืœืš

ื™ื•ืžื ื™ื (ืื• "ื™ื•ืžื ื™ื") ื”ื ืื™ืจื•ืขื™ื, ื‘ื“ืจืš ื›ืœืœ ืžืชื•ืขื“ื™ื ื‘ืคื•ืจืžื˜ ื˜ืงืกื˜, ื”ืžืชืจื—ืฉื™ื ื‘ืชื•ืš ื”ืืคืœื™ืงืฆื™ื” (ื–ืจื ืื™ืจื•ืขื™ื). ื“ื•ื’ืžื” ืคืฉื•ื˜ื”: "2020-02-02 - ืจืžืช ืžืขืจื›ืช - ืฉื ืชื”ืœื™ืš." ื”ื ืžืชื•ื›ื ื ื™ื ื›ืš ืฉื”ืžืคืชื— ื™ื•ื›ืœ ืžืžืฉ ืœืจืื•ืช ืžื” ืงื•ืจื” ื›ืฉื”ืชื•ื›ื ื™ืช ืคื•ืขืœืช. ื”ื•ื ืจื•ืื” ืืช ื”ืชืงื“ืžื•ืช ื”ืชื”ืœื™ื›ื™ื ื•ืžื‘ื™ืŸ ื”ืื ื–ื” ื›ืคื™ ืฉื”ืžืคืชื— ืขืฆืžื• ื”ืชื›ื•ื•ืŸ.

ืขื™ืงืจื•ืŸ ื–ื” ืงื•ื‘ืข ืฉืืกื•ืจ ืœืื—ืกืŸ ืืช ื”ื™ื•ืžื ื™ื ืฉืœืš ื‘ืชื•ืš ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœืš - ืืชื” ืฆืจื™ืš ืคืฉื•ื˜ "ืคืœื˜" ืื•ืชื ืœืžืกืš, ืœืžืฉืœ, ืœืขืฉื•ืช ื–ืืช ื‘ืคืœื˜ ื”ืกื˜ื ื“ืจื˜ื™ ืฉืœ ื”ืžืขืจื›ืช. ื•ื‘ื“ืจืš ื–ื• ื ื™ืชืŸ ื™ื”ื™ื” ืœืขืงื•ื‘ ืื—ืจ ื”ื–ืจื™ืžื” ื‘ื˜ืจืžื™ื ืœ ื‘ืžื”ืœืš ื”ืคื™ืชื•ื—.

ื”ืื ื–ื” ืื•ืžืจ ืฉืื™ืŸ ืฆื•ืจืš ืœืฉืžื•ืจ ื™ื•ืžื ื™ื ื‘ื›ืœืœ? ื‘ืจื•ืจ ืฉืœื. ื”ืืคืœื™ืงืฆื™ื” ืฉืœืš ืคืฉื•ื˜ ืœื ืฆืจื™ื›ื” ืœืขืฉื•ืช ื–ืืช - ื”ืฉืืจ ืื•ืชื” ืœืฉื™ืจื•ืชื™ ืฆื“ ืฉืœื™ืฉื™. ื”ืืคืœื™ืงืฆื™ื” ืฉืœืš ื™ื›ื•ืœื” ืœื”ืขื‘ื™ืจ ื™ื•ืžื ื™ื ืจืง ืœืงื•ื‘ืฅ ืื• ืœืžืกื•ืฃ ืกืคืฆื™ืคื™ ืœืฆืคื™ื™ื” ื‘ื–ืžืŸ ืืžืช, ืื• ืœื”ืขื‘ื™ืจ ืื•ืชื• ืœืžืขืจื›ืช ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœืฉื™ืžื•ืฉ ื›ืœืœื™ (ื›ื’ื•ืŸ Hadoop). ื”ื™ื™ืฉื•ื ืฉืœืš ืขืฆืžื• ืœื ืืžื•ืจ ืœืื—ืกืŸ ืื• ืœืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื™ื•ืžื ื™ื.

ืขืงืจื•ืŸ 10. ืžื‘ื—ืŸ!

ืขื‘ื•ืจ ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช, ืฉืœื‘ ื–ื” ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ, ืžื›ื™ื•ื•ืŸ ืฉืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืฉื”ื“ื’ื ืขื•ื‘ื“ ื ื›ื•ืŸ ื•ืžื™ื™ืฆืจ ืืช ืžื” ืฉืจืฆื™ืช.

ื ื™ืชืŸ ืœื™ืฆื•ืจ ื‘ื“ื™ืงื•ืช ื‘ืืžืฆืขื•ืช pytest, ื•ืœื‘ื“ื•ืง ื‘ืืžืฆืขื•ืช ืžืขืจืš ื ืชื•ื ื™ื ืงื˜ืŸ ืื ื™ืฉ ืœืš ืžืฉื™ืžืช ืจื’ืจืกื™ื”/ืกื™ื•ื•ื’.

ืืœ ืชืฉื›ื— ืœื”ื’ื“ื™ืจ ืืช ืื•ืชื• ืžืงื•ืจ ืœืžื•ื“ืœื™ื ืฉืœ ืœืžื™ื“ื” ืขืžื•ืงื”, ื›ืš ืฉื”ื ืœื ื™ืคื™ืงื• ื›ืœ ื”ื–ืžืŸ ืชื•ืฆืื•ืช ืฉื•ื ื•ืช.

ื–ื” ื”ื™ื” ืชื™ืื•ืจ ืงืฆืจ ืฉืœ 10 ื”ืขืงืจื•ื ื•ืช, ื•ื›ืžื•ื‘ืŸ ืฉืงืฉื” ืœื”ืฉืชืžืฉ ื‘ื”ื ืžื‘ืœื™ ืœื ืกื•ืช ื•ืœืจืื•ืช ืื™ืš ื”ื ืขื•ื‘ื“ื™ื, ืื– ืžืืžืจ ื–ื” ื”ื•ื ืจืง ืคืจื•ืœื•ื’ ืœืกื“ืจืช ืžืืžืจื™ื ืžืขื ื™ื™ื ื™ื ืฉื‘ื”ื ืื’ืœื” ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืžื•ื“ืœื™ื ืฉืœ ืœืžื™ื“ืช ืžื›ื•ื ื” ืชืขืฉื™ื™ืชื™ืช, ื›ื™ืฆื“ ืœืฉืœื‘ ืื•ืชื ื‘ืžืขืจื›ื•ืช, ื•ื›ื™ืฆื“ ืขืงืจื•ื ื•ืช ืืœื• ื™ื›ื•ืœื™ื ืœื”ืงืœ ืขืœ ื›ื•ืœื ื•.

ืื ืกื” ื’ื ืœื”ืฉืชืžืฉ ื‘ืขืงืจื•ื ื•ืช ืžื’ื ื™ื‘ื™ื ืฉื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœื”ืฉืื™ืจ ื‘ืชื’ื•ื‘ื•ืช ืื ื™ืจืฆื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”