Python เจ…เจคเฉ‡ Bash เจฆเฉ‹เจธเจคเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ: python-shell เจ…เจคเฉ‡ smart-env v เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเจพเจฐเฉ€ เจ•เจฐเจจเจพเฅค 1.0.1

เจธเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจผเฉเจญ เจฆเจฟเจจ!

29 เจซเจฐเจตเจฐเฉ€ 2020 เจธเจพเจฒ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจ…เจงเจฟเจ•เจพเจฐเจค เจฎเจพเจˆเจ•เฉเจฐเฉ‹-เจฐเจฟเจฒเฉ€เจœเจผ เจนเฉ‹เจˆ smart-env ะธ python-เจธเจผเฉˆเจฒ. เจ‰เจนเจจเจพเจ‚ เจฒเจˆ เจœเฉ‹ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจจ, เจฎเฉˆเจ‚ เจธเฉเจเจพเจ… เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉœเฉเจนเฉ‹ เจชเจนเจฟเจฒเฉ€ เจชเฉ‹เจธเจŸ.

เจธเฉฐเจ–เฉ‡เจช เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจ•เจฎเจพเจ‚เจก เจธเฉฐเจชเฉ‚เจฐเจจเจคเจพ, เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚, เจ•เฉเจ เจฐเฉ€เจซเฉˆเจ•เจŸเจฐเจฟเฉฐเจ— เจ…เจคเฉ‡ เจฌเฉฑเจ— เจซเจฟเจ•เจธ เจธเจผเจพเจฎเจฒ เจนเจจเฅค

เจตเฉ‡เจฐเจตเจฟเจ†เจ‚ เจฒเจˆ เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจฌเจฟเฉฑเจฒเฉ€ เจตเฉ‡เจ–เฉ‹เฅค

python-shell เจตเจฟเฉฑเจš เจจเจตเจพเจ‚ เจ•เฉ€ เจนเฉˆ?

เจฎเฉˆเจ‚ เจคเฉเจฐเฉฐเจค เจฎเจฟเจ เจ†เจˆ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจชเฉ‚เจฐเจคเฉ€

เจธเจนเจฟเจฎเจค เจนเฉ‹ - เจ‡เจน เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจธเฉฐเจชเจพเจฆเจ•/เจ†เจˆเจกเฉ€เจˆ/เจŸเจฐเจฎเฉ€เจจเจฒ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจฆเฉ‡ เจจเจพเจฎ เจฒเจˆ เจชเฉเฉฑเจ›เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เจˆ เจตเจพเจฐ เจ•เจพเจฒ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจตเฉ€? เจ‡เจธ เจฒเจˆ เจชเจพเจˆเจฅเจจ-เจธเจผเฉˆเจฒ เจนเฉŒเจฒเฉ€-เจนเฉŒเจฒเฉ€ เจธเจฎเจพเจจ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจคเจฐเฉฑเจ•เฉ€ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจ•เจพเจฐเจจ เจ•เจฟ เจนเฉเฉฑเจก เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจธเจผเฉˆเฉฑเจฒ เจ•เจฒเจพเจธ เจฆเฉ‡ เจซเฉ€เจฒเจก เจกเฉ€-เจซเฉˆเจ•เจŸเฉ‹ เจนเจจ เจจเจพ เจ•เจฟ เจ‡เจธเจฆเฉ‡ เจซเฉ€เจฒเจก (เจธเจฐเจฌเจตเจฟเจ†เจชเฉ€ __getattr__), เจธเจตเฉˆ-เจธเฉฐเจชเฉ‚เจฐเจจเจคเจพ เจจเฉ‚เฉฐ เจตเฉ€ เจธเจ•เฉเจฐเฉˆเจš เจคเฉ‹เจ‚ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€ (เจ•เฉเจฐเจฎเจตเจพเจฐ __dir__ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจ“เจตเจฐเจฒเฉ‹เจก เจ•เจฐเจ•เฉ‡)เฅค เจ†เจŸเฉ‹เจ•เฉฐเจชเจฒเจธเจผเจจ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš BPython เจ…เจคเฉ‡ IPython เจตเจพเจคเจพเจตเจฐเจจ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจฎเฉˆเจ‚ PyCharm เจตเจฐเจ—เฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจธเจคเจฟเจ•เจพเจฐเจฏเฉ‹เจ— เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเจพเจฒ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเจพเจ‚เจ—เจพ, เจ…เจคเฉ‡ เจ‡เจธ เจฆเจฟเจธเจผเจพ เจตเจฟเฉฑเจš เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจธเฉฐเจญเจพเจตเจจเจพเจตเจพเจ‚ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆเฅค

เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ

เจฐเฉ€เจฒเฉ€เจœเจผ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚, เจธเจผเฉˆเฉฑเจฒ เจ•เจฒเจพเจธ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจ†เจ–เจฐเฉ€_เจ•เจฎเจพเจ‚เจก เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจˆ เจนเฉˆเฅค เจ‡เจธเจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจ‡เจธ เจฒเจˆ เจชเฉˆเจฆเจพ เจนเฉ‹เจˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเจผเฉˆเฉฑเจฒเจเจ•เจธเฉˆเจชเจธเจผเจจ เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจœเจผเฉ€เจฐเฉ‹ เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก เจจเจพเจฒ เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจฆเฉเจ†เจฐเจพ เจธเฉเฉฑเจŸเจฟเจ† เจ—เจฟเจ† เจธเฉ€, เจคเจพเจ‚ เจ•เจฎเจพเจ‚เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ __call__() เจ•เจพเจฒ เจคเฉ‹เจ‚ เจ•เจฎเจพเจ‚เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจตเจพเจชเจธ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจนเฉเจฃ เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฆเจพ เจ‡เฉฑเจ• เจฎเฉŒเจ•เจพ เจนเฉˆ:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

เจ•เจฎเจพเจ‚เจก เจ†เจฌเจœเฉˆเจ•เจŸ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจตเฉ€ เจซเฉˆเจฒ เจ—เจˆ เจนเฉˆเฅค เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจ–เฉ‡เจคเจฐ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจœเฉ‹ เจ•เจฎเจพเจ‚เจก เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจจเฉ‚เฉฐ เจ—เจฒเจคเฉ€ เจธเจŸเฉเจฐเฉ€เจฎ เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ…เจตเฉˆเจง เจชเจพเจˆเจฅเจจ เจจเจพเจฎเจพเจ‚ เจจเจพเจฒ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจšเฉฑเจฒ เจฐเจนเฉ€เจ†เจ‚ เจนเจจ

เจฒเจ—เจญเจ— เจนเจฐ เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฟเจธเจฆเจพ เจจเจพเจฎ เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจขเฉเจ•เจตเจพเจ‚ เจจเจนเฉ€เจ‚ เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฎเจธเจผเจนเฉ‚เจฐ 2to3 เจ‰เจชเจฏเฉ‹เจ—เจคเจพ)เฅค เจ‰เจธ เจจเฉ‚เฉฐ เจจเจพเจฒ เจฌเฉเจฒเจพเจ“

Shell.2to3()

เจœเฉ‡เจ•เจฐ เจ‡เจน เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฆเฉเจญเจพเจธเจผเฉ€เจ เจ‡เจธ เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค
เจนเฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจ—เฉ‹เจฒ เจšเฉฑเจ•เจฐ เจตเจฟเฉฑเจš เจ•เจพเจฒ เจ•เจฐเฉ‹:

Shell("2to3")  # ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ ะพะฑัŠะตะบั‚ ะบะพะผะฐะฝะดั‹

เจ‡เจน เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจ•เจฟ เจ‰เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจฆเฉเจญเจพเจธเจผเฉ€เจ เจฆเฉ‡ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚ เจตเฉˆเจง เจนเจจ, เจœเฉ‹ เจฒเจšเจ•เจฆเจพเจฐ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจฎเฉŒเจ•เจพ เจ›เฉฑเจกเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

เจฎเจพเจฎเฉ‚เจฒเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚

  • เจ•เจฎเจพเจ‚เจก เจ•เจฒเจพเจธ เจ†เจฌเจœเฉˆเจ•เจŸ เจฆเฉ€เจ†เจ‚ __repr__() เจ…เจคเฉ‡ __str__() เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจนเฉเจฃ เจ…เจจเฉเจญเจตเฉ€ เจฎเฉเฉฑเจฒ เจชเฉˆเจฆเจพ เจ•เจฐเจฆเฉ‡ เจนเจจ (เจ•เฉเจฐเจฎเจตเจพเจฐ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ stdout เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจตเจพเจฒเฉ€ เจ•เจฎเจพเจ‚เจก)เฅค
  • เจฎเจพเจฎเฉ‚เจฒเฉ€ เจ•เฉ‹เจก เจซเจฟเจ•เจธเฅค
  • เจŸเฉˆเจธเจŸ เจ•เจตเจฐเฉ‡เจœ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ, เจจเจพเจฒ เจนเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฆเจพ เจชเฉเจจเจฐเจ—เจ เจจ เจ•เจฐเจจเจพเฅค
  • เจธเจฌเจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฒเจพเจธเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ, เจœเจฟเจธเจฆเจพ เจ‰เจฆเฉ‡เจธเจผ เจธเจฌเจชเฉเจฐเฉ‹เจธเฉˆเจธ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจเจฌเจธเจŸเจฐเฉˆเจ•เจธเจผเจจ เจฆเจพ เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจชเฉฑเจงเจฐ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆเฅค Python 2/3 เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจ•เฉ‹เจก เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเจจ เจฒเจˆ เจœเจฟเจ†เจฆเจพเจคเจฐ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจธเฉฐเจญเจพเจตเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจนเฉ‹เจฐ เจฌเฉ‹เจจเจธ เจตเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

smart-env เจตเจฟเฉฑเจš เจจเจตเจพเจ‚ เจ•เฉ€ เจนเฉˆ?

python-shell เจฆเฉ‡ เจ‰เจฒเจŸ, smart-env เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸ เจฌเจฆเจฒเจพเจ… เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค เจ‡เจธเจฆเจพ เจ•เจพเจฐเจจ เจธเจงเจพเจฐเจจ เจนเฉˆ - เจ–เจพเจฒเฉ€ เจธเจฎเฉ‡เจ‚ เจฆเฉ€ เจ˜เจพเจŸ, เจœเจฟเจธ เจฆเฉŒเจฐเจพเจจ เจ•เฉเจ เจธเฉฐเจญเจพเจตเฉ€ เจธเฉเจงเจพเจฐ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ€ เจธเจตเฉˆ-เจธเฉฐเจชเฉ‚เจฐเจจเจคเจพ) เจจเฉ‚เฉฐ เจ…เจ—เจฒเฉ€ เจฐเฉ€เจฒเฉ€เจœเจผ เจตเจฟเฉฑเจš เจญเฉ‡เจœเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค

เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจตเจฟเฉฑเจš เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจฌเจฆเจฒเจพเจ… เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ:

  • เจฎเจพเจฎเฉ‚เจฒเฉ€ เจ•เฉ‹เจก เจซเจฟเจ•เจธเฅค
  • เจฐเฉ€เจซเฉˆเจ•เจŸเจฐเจฟเฉฐเจ—.
  • เจฎเฉŒเจœเฉ‚เจฆเจพ เจŸเฉˆเจธเจŸเจพเจ‚ เจฆเจพ เจชเฉเจจเจฐเจ—เจ เจจ เจ…เจคเฉ‡ เจธเฉเจงเจพเจฐเฅค

เจ…เจ—เจฒเฉ€เจ†เจ‚ เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ เจฒเจˆ เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚

python-shell เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€

  • เจ—เฉˆเจฐ-เจฌเจฒเจพเจ•เจฟเฉฐเจ— เจ•เจฎเจพเจ‚เจก เจ•เจพเจฒเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจœเฉ‹เฉœเจจเจพ (เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉ€ เจธเจฎเจพเจจเจคเจพ)เฅค

เจธเจฎเจพเจฐเจŸ-เจเจจเจตเฉ€ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€

  • ENV เจ•เจฒเจพเจธ เจตเจฟเฉฑเจš เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ€ เจธเจตเฉˆ-เจชเฉ‚เจฐเจคเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพเฅค
  • เจ‡เฉฑเจ• env เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจตเจฟเฉฑเจš เจ“เจชเจฐเฉ‡เจŸเจฐ เจฒเจˆ เจธเจฎเจฐเจฅเจจ.
  • ENV เจ•เจฒเจพเจธ เจฒเจˆ str() เจ…เจคเฉ‡ repr() เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพเฅค

เจ…เจ—เจฒเฉ€เจ†เจ‚ เจฐเฉ€เจฒเฉ€เจœเจผเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจคเจฐเฉ€เจ•เจพเจ‚ เจฆเฉ€ เจ˜เฉ‹เจธเจผเจฃเจพ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจธเฉฐเจšเจพเจฐ เจšเฉˆเจจเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€:

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹