เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบฐเบ•เบธเป‰เบ™เปƒเบซเป‰เบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป‚เบ”เบเบงเบฑเบ”เบชเบฐเบ”เบธเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบ›เบฐเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”, เบ™เบตเป‰ เบšเบฅเบฑเบญเบ PVS-studio, เป€เบŠเบดเปˆเบ‡เบชเบปเปˆเบ‡เป€เบชเบตเบกเบ•เบปเบ™เป€เบญเบ‡เบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡เปƒเบ™Habre เบ”เป‰เบงเบเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”. เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰ PVS-studio เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ” เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Java, เปเบฅเบฐ, เปเบ™เปˆเบ™เบญเบ™, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ IntelliJ IDEA, เป€เบŠเบดเปˆเบ‡เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เปเบšเบšเบžเบดเป€เบชเบ”เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบš Java เปƒเบ™เบกเบทเป‰เบ™เบตเป‰, เบšเปเปˆเบชเบฒเบกเบฒเบ”เบขเบนเปˆเบซเปˆเบฒเบ‡เป†.

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบญเปˆเบฒเบ™เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš magic elixir: เบเบปเบ”เบ›เบธเปˆเบก, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™ - เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบเปˆเบญเบ™เบ•เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบเป‰เบญเบ™เบงเปˆเบฒเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบ›เบฑเบšเบ›เบธเบ‡, เปเบกเบ‡เป„เบกเป‰เบซเบผเบฒเบเบ‚เบทเป‰เบ™เบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ—เบตเปˆเบชเบฐเปเบเบ™เป‚เบ”เบเบซเบธเปˆเบ™เบเบปเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเปเบฅเบฐเบ”เบตเบเบงเปˆเบฒ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปƒเบ”เป†เปƒเบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เปเบ•เปˆเบšเปเปˆเบกเบต elixirs magic. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบเบˆเบฐเบšเปเปˆเป€เบงเบปเป‰เบฒเป€เบ–เบดเบ‡เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบŠเบฑเปˆเบ™ "เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบธเปˆเบ™เบเบปเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป„เบ”เป‰": เบชเบดเปˆเบ‡เบ—เบตเปˆเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เบšเบปเบ”เบšเบฒเบ”เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบŠเบญเบšเปเบง, เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบงเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. .

เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰
Ratchet (เปเบซเบผเปˆเบ‡: wikipedia).

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบšเปเปˆเป€เบ„เบตเบเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบกเปˆเบ™เบซเบเบฑเบ‡, เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ›เบฐเบ•เบดเบšเบฑเบ”? เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบšเบฒเบ‡เบญเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเป€เบ›เบฑเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”, เปƒเบ™เป€เบงเบฅเบฒเบญเบฑเบ™เบชเบฑเป‰เบ™เป† (เบชเบฑเป‰เบ™เบเบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ) เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐ insurmountable เบ—เบฒเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเป€เบžเบ”เปเบ„เบšเบžเปเบชเบปเบกเบ„เบงเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เปเบกเปˆเบ™ เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบดเบ”: เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบดเบ”เบชเบฐเบ”เบตเบšเบปเบ”เบ—เบตเปˆเบžเบดเบชเบนเบ”เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒ algorithm เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบˆเบฒเบ source code เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐ loop เบซเบผเบทเบขเบธเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”. เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบ—เบดเบ”เบชเบฐเบ”เบตเบšเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™ เบ—เบดเบ”เบชเบฐเบ”เบตเบšเบปเบ”เบ‚เบญเบ‡เป€เบ‚เบปเป‰เบฒ, เป€เบŠเบดเปˆเบ‡เบฅเบฐเบšเบธเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเป†เบ™เป‰เบญเบเป†เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป„เบฅเปˆเป„เบ”เป‰, เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™ arbitrary เบ›เบฐเป€เบกเบตเบ™เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒ intractable algorithmically. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ, เป€เบงเบปเป‰เบฒ, squaring เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบœเปˆเบฒเบ™เป„เบ”เป‰. เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบเบงเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™เบ—เบธเบเบเปเบฅเบฐเบ™เบตเป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡ "เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบ•เบปเบงเบŠเบตเป‰ null" เปƒเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ„เปˆเบฒเบ‚เบญเบ‡ null, เบซเบผเบทเปƒเบ™เบ—เบธเบเบเปเบฅเบฐเบ™เบตเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ‚เบญเบ‡ ". เบšเปเปˆเบžเบปเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”" เปƒเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบžเบดเบกเปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบ. เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบ—เบตเปˆเบเป‰เบฒเบงเบซเบ™เป‰เบฒเบ—เบตเปˆเบชเบธเบ”เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”, เบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆ, เปƒเบ™เบšเบฑเบ™เบ”เบฒเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบกเปˆเบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบเบตเบ™เบˆเบดเบ‡, เบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เปƒเบ™เบ–เบฑเบ‡.

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบปเบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰

เบˆเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบเบฒเบ™เบชเบฐเบซเบฅเบธเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰: เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเป€เบงเบปเป‰เบฒเบงเปˆเบฒ: เป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เบˆเบฐเบŠเบญเบเบซเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ "เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ" เปƒเบ™เบฅเบฐเบซเบฑเบ”, เปเบ•เปˆ, เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐ, เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบžเบปเบšเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบ”เป†เบ—เบตเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เป‚เบ›เบผเปเบเบผเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบžเบปเบšเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ›เบฐเบ—เบฑเบšเปƒเบˆ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ„เบงเบ™เบฅเบทเบกเบงเปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบชเบฐเปเบเบ™เบŠเบธเบ”เบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เป‚เบ”เบเบซเบผเบฑเบเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™, เปเบฎเบเป€เบเบตเบ—เบตเปˆเบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบเปƒเบ™เบšเบฑเบ™เบŠเบตเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบเปเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบšเบฑเบ™เบŠเบตเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ‡เปˆเบฒเบเป†.

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static เบšเปเปˆเบ„เบงเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰? เปเบ™เปˆเบ™เบญเบ™เบšเปเปˆ! เปเบฅเบฐเบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™เปเบ—เป‰เป†เบ—เบตเปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบ•เปˆเบฅเบฐเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบขเบธเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™ "เบ‡เปˆเบฒเบเบ”เบฒเบ".

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบปเบ‡เบ—เบตเปˆเปเบกเปˆเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบเบฒเบ™เบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบกเปˆเบ™เบเบงเป‰เบฒเบ‡เบเบงเปˆเบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเปเบกเปˆเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰:

  • เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบเบเบงเป‰เบฒเบ‡เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบ„เปเบฒ. เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบ—เบฑเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบˆเบฑเบ”เบฎเบนเบšเปเบšเบš, เบŠเบญเบเบซเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบงเบปเบ‡เป€เบฅเบฑเบšเป€เบ›เบปเปˆเบฒ / เบžเบดเป€เบชเบ”, เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบŠเบฑเปˆเบ™: เบˆเปเบฒเบ™เบงเบ™เป€เบชเบฑเป‰เบ™ / เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป† - เบชเบดเปˆเบ‡เปƒเบ”เปเบ”เปˆเบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ”. เปƒเบ™ Java, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™ Checkstyle, เปƒเบ™ Python - flake8. เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ™เบตเป‰เบกเบฑเบเบˆเบฐเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "linters".
  • เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเป„เบ”เป‰. เป„เบŸเบฅเปŒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป€เบŠเบฑเปˆเบ™ JSON, YAML, XML, .properties เบชเบฒเบกเบฒเบ” (เปเบฅเบฐเบ„เบงเบ™!) เบ–เบทเบเบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ JSON เบ–เบทเบเบ—เปเบฒเบฅเบฒเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เปเบฒเป€เบงเบปเป‰เบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบšเบ„เบนเปˆเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบซเบผเบฒเบเบเบงเปˆเบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบผเบทเป€เบงเบฅเบฒเปเบฅเปˆเบ™? เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเปเบกเปˆเบ™เบกเบตเบขเบนเปˆ: e.g. YAMLlint, JSONLint.
  • เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก (เบซเบผเบทเบเบฒเบ™เปเบเบเบงเบดเป€เบ„เบฒเบฐเบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง) เบเบฑเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, compilers เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบœเบฐเบฅเบดเบ”เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบตเปˆเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบฅเบฐเบšเปเปˆเบ„เบงเบ™เบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.
  • เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบกเปˆเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป€เบญเบเบฐเบชเบฒเบ™เปƒเบ™เบฎเบนเบšเปเบšเบš เบ—เปˆเบฒเบ™เปเป Ascii, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ HTML / PDF เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™ AsciiDoctor (เบ›เบฑpluginเบเบญเบดเบ™ Maven) เบชเบฒเบกเบฒเบ”เบญเบญเบเบ„เปเบฒเป€เบ•เบทเบญเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบžเบฒเบเปƒเบ™เบ—เบตเปˆเปเบ•เบเบซเบฑเบ. เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบšเปเปˆเบเบญเบกเบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบญเบเบฐเบชเบฒเบ™.
  • เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒเบเบฑเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”. เบ›เบฐเป‚เบซเบเบ” เบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒ เบชเบฒเบกเบฒเบ”เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™, เปเบ•เปˆเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบก (เบ„เปเบฒเป€เบซเบฑเบ™เปเบฅเบฐเบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบท) เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ•เปˆเบฒเบ‡เป†, เบฅเบงเบกเบ—เบฑเบ‡ C / C ++, Java เปเบฅเบฐ Python. เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เบซเบผเบทเป€เบญเบเบฐเบชเบฒเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡!
  • เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ (เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเป€เบ›เบฑเบ™ - เป€เบšเบดเปˆเบ‡. เบ™เบตเป‰ ะธ เบ™เบตเป‰ เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™), เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™ runtime เป€เบŠเบฑเปˆเบ™ pytest, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบเบฑเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบเบฒเบ™เบŠเบญเบเบซเบฒเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ™เบตเป‰เบกเบตเบšเบปเบ”เบšเบฒเบ”เบชเปเบฒเบ„เบฑเบ™เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”, เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบŸเบฃเบต.

เบ›เบฐเป€เบžเบ”เปƒเบ”เปเบ”เปˆเบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เปƒเบŠเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™? เปเบ™เปˆเบ™เบญเบ™, เบซเบผเบฒเบเบเบดเปˆเบ‡เบ”เบต! เบชเบดเปˆเบ‡เบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ•เบทเปˆเบกเบญเบตเบ.

เบ—เปเปˆเบชเบปเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบฅเบฐเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ•เบปเบ™

เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเปเบšเบšเบ„เบฅเบฒเบชเบชเบดเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปเบกเปˆเบ™เบ—เปเปˆเบœเปˆเบฒเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เป„เบซเบผเป€เบ‚เบปเป‰เบฒ, เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป„เบ›เบชเบนเปˆเบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เบฅเปเบฒเบ”เบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปƒเบ™เบ—เปเปˆเบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

  1. เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”
  2. เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก
  3. เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบซเบปเบงโ€‹เบซเบ™เปˆเบงเบโ€‹
  4. เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เป‚เบเบ‡โ€‹
  5. เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI
  6. เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบ„เบนเปˆโ€‹เบกเบทโ€‹

เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เป€เบชเบ”โ€‹เปƒเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™ Nth เบ‚เบญเบ‡โ€‹เบ—เปเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเบปเบโ€‹เบเป‰เบฒเบโ€‹เป„เบ›โ€‹เบ‚เบฑเป‰เบ™ N+1.

เป€เบ›เบฑเบ™โ€‹เบซเบเบฑเบ‡โ€‹เปเบ™เปˆโ€‹เบ™เบญเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹? เปƒเบ™เบชเปˆเบงเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบ—เปเปˆ, เบœเบนเป‰เบ—เบปเบ”เบชเบญเบšเบˆเบฐเบฎเบฑเบšเบฎเบนเป‰ pyramid เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡.

เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰
เบ—เบปเบ”เบชเบญเบš pyramid. เบ—เบตเปˆเบกเบฒ: เบšเบปเบ”เบ„เบงเบฒเบก Martin Fowler.

เบขเบนเปˆเบ”เป‰เบฒเบ™เบฅเบธเปˆเบกเบ‚เบญเบ‡ pyramid เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ‚เบฝเบ™, เป„เบงเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเบฐเบšเปเปˆเบกเบตเปเบ™เบงเป‚เบ™เป‰เบกเบ—เบตเปˆเบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เบงเบ™เบˆเบฐเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบ‚เบปเบฒเบ„เบงเบ™เบˆเบฐเบเบงเบกเป€เบญเบปเบฒเบฅเบฐเบซเบฑเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบเปˆเบญเบ™. เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ pyramid, เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI เบ„เบงเบ™เบ–เบทเบเบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™. เบšเบธเบเบ„เบปเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ™เบตเป‰เปเบกเปˆเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบฅเบฒเบ„เบฒเปเบžเบ‡เบ—เบตเปˆเบชเบธเบ”, เบŠเป‰เบฒเปเบฅเบฐเบšเปเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบฅเบฒเบงเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบชเบธเบ”เบ—เป‰เบฒเบเปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบšเปเปˆเบžเบปเบšเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบซเบผเบฑเบเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ—เปเปˆเปƒเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš!

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ™เป‰เปเบฒเบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบ™เป‰เปเบฒเป€เบ›เบทเป‰เบญเบ™ (เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡) เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบเบฑเบšเบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™; เป€เบกเบทเปˆเบญเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ™เป‰เปเบฒเบชเบฐเบญเบฒเบ”, เป€เบŠเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ›เบปเบ™เป€เบ›เบทเป‰เบญเบ™เบ—เบตเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบˆเบฑเบ”.

เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰
เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบ—เบตเปˆเบกเบฒ: เบงเบดเบเบดเบžเบตเป€เบ”เบ

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ•เปˆเบฅเบฐ cascade เบ•เปเปˆเบกเบฒเบชเบฒเบกเบฒเบ”เบเบฑเปˆเบ™เบ•เบญเบ‡เบญเบญเบเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบปเบ™เป€เบ›เบทเป‰เบญเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, cascades เบ‚เบญเบ‡ purification coarser เบกเบต throughput เบชเบนเบ‡เปเบฅเบฐเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ•เปˆเปเบฒ. เปƒเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ›เบฐเบ•เบนเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เป„เบงเบ‚เบถเป‰เบ™, เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปเบกเปˆเบ™ unpretentious เบซเบผเบฒเบเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ - เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบฅเปเบฒเบ”เบฑเบšเบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”, เป€เบŠเบดเปˆเบ‡, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบˆเบฐเบเปเบฒเบˆเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”, เปเบกเปˆเบ™เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบ•เบฒเบ‚เปˆเบฒเบเป„เบŸเบŸเป‰เบฒ "เบ‚เบตเป‰เบ•เบปเบก" เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ—เปเปˆเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡.

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบปเบ‡เบ—เบตเปˆเบ”เป‰เบงเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ, เบ„เบทเบเบฑเบ™เบเบฑเบš "เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เบตเป‰เบ•เบปเบก" เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ™เป‰เปเบฒเบ”เบทเปˆเบกเป„เบ”เป‰. เปเบฅเบฐเบ—เบฑเบ™, เป‚เบ”เบเบชเบปเบกเบ—เบปเบšเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบ—เปเปˆ, เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบˆเบฐเปเบˆเป‰เบ‡. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ•เบปเบงเบเบญเบ‡เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบตเบ—เปˆเบฒเปเบฎเบ‡เบ—เบตเปˆเบˆเบฐเบˆเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบฎเบฑเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบเบตเบ”เบกเบฒเบˆเบฒเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบšเปเบฅเบดเบชเบธเบ”เบขเปˆเบฒเบ‡เบ”เบฝเบง, เป‚เบ”เบเบšเปเปˆเบกเบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™.

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡ "เบˆเบฑเปˆเบ™เบˆเบฑเบšเบ‚เบตเป‰เบ•เบปเบก" เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบšเบฑเบ™เป€เบ—เบปเบฒเบ„เบงเบฒเบกเบšเบปเบเบœเปˆเบญเบ‡เบ•เปเปˆเบกเบฒเบˆเบฒเบเบเบฒเบ™เบˆเบฑเบšเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบซเบผเบฒเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ, เบšเบธเบเบ„เบปเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”เบšเปเปˆเบ„เบงเบ™เบ–เบทเบเบฅเบปเบšเบเบงเบ™เป‚เบ”เบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบทเป‰เบ™ (เป€เบŠเบฑเปˆเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบžเบดเป€เบชเบ”เบซเบผเบทเบชเบฒเบ‚เบฒเบ—เบตเปˆเบเบฑเบ‡เป€เบฅเบดเบเป€เบเบตเบ™เป„เบ›). เปเบกเบ‡เป„เบกเป‰เป€เบŠเบฑเปˆเบ™ NPEs เบ„เบงเบ™เบ–เบทเบเบˆเบฑเบšเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบ, เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบŠเบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™, เบ™เบตเป‰เบˆเบฐเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เบญเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบงเปˆเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ–เป‰เบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบšเบฒเบ‡เบ„เบฑเป‰เบ‡, เปเบฅเบฐเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เป€เบžเบทเปˆเบญเบเบฑเปˆเบ™เบ•เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบฅเบงเบก. เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เบˆเบฐเบŠเปˆเบงเบเบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบเบฒเบ™เบ–เบฒเบกเบงเปˆเบฒ, "เบ™เป‰เปเบฒเบ—เบตเปˆเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบซเบ™เบญเบ‡เป€เบ›เบทเป‰เบญเบ™เบˆเบฐเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบเบฒเบ™เบ”เบทเปˆเบกเบ–เป‰เบฒเบกเบฑเบ™เบœเปˆเบฒเบ™ colander เบšเป?"

เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ‚เบปเป‰เบฒเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบกเปเบฅเบฐเบ”เบปเบ

เบ„เปเบฒเบ–เบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™: เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เป€เบ›เบฑเบ™ "เบ›เบฐเบ•เบนเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบš"? เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™: เบกเบตเบŠเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบเบญเบšเบšเปเปˆเป„เบ”เป‰เบœเปˆเบฒเบ™เบ›เบฐเบ•เบนเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบš. เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบนเบฎเบปเป‰เบงเปƒเบ™เปเบšเบšเบ”เบฝเบงเบเบฑเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบปเบ‡เบ—เบตเปˆเบฅเบปเป‰เบกเป€เบซเบฅเบง: เบกเบตเบ„เปเบฒเป€เบ•เบทเบญเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เบกเปเบฅเบฐเบ”เบปเบ, เบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบฅเบฐเป€เบฅเบตเบเบžเบงเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เปเบ•เปˆเบกเบฑเบ™เบเปเปˆเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบขเบธเบ”เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เบชเบดเบ™เบ„เป‰เบฒ. เบžเบฝเบ‡เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบกเบตเบ„เปเบฒเป€เบ•เบทเบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ.

เป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบœเบฐเบฅเบดเบ”เบ„เปเบฒเป€เบ•เบทเบญเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบชเปˆเบงเบ™เปƒเบซเบเปˆเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เปเบฅเบฐเบซเบผเบฒเบเป†เบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static!

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static, เบซเบผเบทเปƒเบŠเป‰เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เปˆเบฒเบงเบชเบฒเบ™, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป„เบ”เป‰เบ–เบทเบเบญเบญเบเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบš. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบšเปเปˆเบกเบตเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปƒเบ”เป†, เป€เบžเบฒเบฐเบงเปˆเบฒเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เปเบฒเป€เบ•เบทเบญเบ™เบซเบผเบฒเบเปเบฅเป‰เบง, เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบ„เบปเบ™เบญเบทเปˆเบ™ (เบšเปเปˆเบงเปˆเบฒเบฎเป‰เบฒเบเปเบฎเบ‡เบ›เบฒเบ™เปƒเบ”) เป€เบกเบทเปˆเบญเบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”เบˆเบฐเบšเปเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™.

เบงเบดเบ—เบตเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบ›เบฐเบ•เบนเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบ:

  • เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบซเบผเบทเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เปเบšเปˆเบ‡เบญเบญเบเบ”เป‰เบงเบเบˆเปเบฒเบ™เบงเบ™เป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”. เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบ”เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเบ›เบฐเบ•เบนเบฎเบปเป‰เบงเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบซเบกเปˆเบœเปˆเบฒเบ™, เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป€เบเบตเบ™.
  • เบเบฒเบ™เปเบเป‰เป„เบ‚, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบ—เบธเบเป†เบ„เปเบฒเป€เบ•เบทเบญเบ™เป€เบเบปเปˆเบฒเบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ–เบทเบเบฅเบฐเป€เบฅเบตเบ, เปเบฅเบฐเบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเปƒเบซเบกเปˆ. เบซเบ™เป‰เบฒเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบ PVS-studio เปเบฅเบฐเบšเบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบญเบ™เป„เบฅเบ™เปŒ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, Codacy. เบ‚เป‰เบญเบเบšเปเปˆเบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ PVS-studio, เบชเปเบฒเบฅเบฑเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบเบฑเบš Codacy, เบšเบฑเบ™เบซเบฒเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™ "เป€เบเบปเปˆเบฒ" เปเบฅเบฐเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” "เปƒเบซเบกเปˆ" เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบ—เบตเปˆเบšเปเปˆเบชเบฐเป€เบซเบกเบตเป€เบฎเบฑเบ”เบงเบฝเบ. เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ–เป‰เบฒเป„เบŸเบฅเปŒเบ–เบทเบเบ”เบฑเบ”เปเบเป‰เบซเบผเบฒเบเบซเบผเบทเบ›เปˆเบฝเบ™เบŠเบทเปˆ. เปƒเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, Codacy เบชเบฒเบกเบฒเบ”เบšเปเปˆเบชเบปเบ™เปƒเบˆเบ„เปเบฒเป€เบ•เบทเบญเบ™เปƒเบซเบกเปˆเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบšเปเปˆเบœเปˆเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบตเปˆเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡ PR เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰.
  • เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบ„เปเบฒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™เบซเบ™เบฑเบ‡เบชเบท เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ "เบงเบดเบ—เบตเบเบฒเบ™ ratcheting". เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเปเบกเปˆเบ™เบŠเบฑเบšเบชเบดเบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ›เปˆเบญเบ, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”.

Ratchet

เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบ™เบตเป‰:

  1. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™เป€เบฎเบฑเบ”เบขเบนเปˆเปƒเบ™ metadata เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบžเบปเบšเป‚เบ”เบเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบฒเบ‡เป€เบ—เบดเบ‡, เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบ„เบฑเบ‡เป€เบเบฑเบšเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆ "เบ›เปˆเบญเบ 7.0.2", เปเบ•เปˆ "เบ›เปˆเบญเบ 7.0.2 เบ—เบตเปˆเบกเบตเบ„เปเบฒเป€เบ•เบทเบญเบ™ 100500 checkstyle." เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฑเป‰เบ™เบชเบนเบ‡ (เป€เบŠเบฑเปˆเบ™ Artifactory), เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ metadata เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบ‡เปˆเบฒเบ.
  2. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡, เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡, เบ›เบฝเบšเบ—เบฝเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ›เบฐเบˆเบธเบšเบฑเบ™. เบ–เป‰เบฒ PR เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ™เบตเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เบšเปเปˆเป„เบ”เป‰เบœเปˆเบฒเบ™เบ›เบฐเบ•เบนเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ static. เบ–เป‰เบฒเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเบซเบผเบธเบ”เบฅเบปเบ‡เบซเบผเบทเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบœเปˆเบฒเบ™เป„เบ›.
  3. เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ•เปเปˆเป„เบ›, เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เบ—เบตเปˆเบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆเบ„เบทเบ™เปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปƒเบ™ metadata เบเบฒเบ™เบ›เปˆเบญเบ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ—เบทเปˆเบญเบฅเบฐเป€เบฅเบฑเบเบซเบ™เป‰เบญเบเปเบ•เปˆเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ (เป€เบŠเบฑเปˆเบ™เป€เบกเบทเปˆเบญ ratchet เป€เบฎเบฑเบ”เบงเบฝเบ), เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ„เปเบฒเป€เบ•เบทเบญเบ™เบˆเบฐเบกเบตเปเบ™เบงเป‚เบ™เป‰เบกเบ—เบตเปˆเบˆเบฐเบชเบนเบ™. เปเบ™เปˆเบ™เบญเบ™, เบฅเบฐเบšเบปเบšเบชเบฒเบกเบฒเบ”เบ–เบทเบเบซเบฅเบญเบเบฅเบงเบ‡เป‚เบ”เบเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเปƒเบซเบกเปˆ, เปเบ•เปˆเปเบเป‰เป„เบ‚เบ„เบปเบ™เบญเบทเปˆเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ›เบปเบเบเบฐเบ•เบด, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เป„เบฅเบเบฐเป„เบเบกเบฑเบ™เปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš: เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเบ–เบทเบเปเบเป‰เป„เบ‚, เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบšเปเปˆเปเบกเปˆเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบง, เปเบฅเบฐเบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเบ—เบตเปˆเบ–เบญเบ”เบญเบญเบเป„เบ”เป‰เบ‡เปˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ–เบทเบเบฅเบปเบšเบฅเป‰เบฒเบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบ•เบทเบญเบ™ Checkstyle เบชเปเบฒเบฅเบฑเบšเบซเบปเบเป€เบ”เบทเบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง "ratchet" เบชเบธเบ” เบซเบ™เบถเปˆเบ‡เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ OpenSource เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเป€เบ•เบทเบญเบ™เป„เบ”เป‰เบซเบผเบธเบ”เบฅเบปเบ‡เป‚เบ”เบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”, เปเบฅเบฐเบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™!

เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเปเบกเบ‡เป„เบกเป‰

เบ‚เป‰เบญเบเปƒเบŠเป‰เบชเบฐเบšเบฑเบšเบ”เบฑเบ”เปเบเป‰เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰, เบเบฒเบ™เบ™เบฑเบšเบ„เปเบฒเป€เบ•เบทเบญเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเป‚เบ”เบเป‚เบกเบ”เบนเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ, เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป„เบŸเบฅเปŒ YAML เบ—เบตเปˆเบกเบต metadata เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ„เป‰เบฒเบเบ„เบทเบ™เบตเป‰:

celesta-sql:
  checkstyle: 434
  spotbugs: 45
celesta-core:
  checkstyle: 206
  spotbugs: 13
celesta-maven-plugin:
  checkstyle: 19
  spotbugs: 0
celesta-unit:
  checkstyle: 0
  spotbugs: 0

เปƒเบ™เบฅเบฐเบšเบปเบš CI เบ‚เบฑเป‰เบ™เบชเบนเบ‡เปƒเบ”เป†, ratchet เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบญเบตเบ‡เปƒเบชเปˆ plugins เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก. เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบœเบฐเบฅเบดเบ”เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบซเบผเบท XML เบ—เบตเปˆเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ. เบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฝเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบชเบฐเบ„เบดเบš CI. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Jenkins เปเบฅเบฐ Artifactory เบ—เบตเปˆเบ™เบตเป‰ เบซเบผเบท เบ—เบตเปˆเบ™เบตเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบฑเบ‡เบชเบญเบ‡เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” ratchetlib: เบงเบดเบ—เบตเบเบฒเบ™ countWarnings() เบ™เบฑเบšเปเบ—เบฑเบ xml เปƒเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบ Checkstyle เปเบฅเบฐ Spotbugs เปƒเบ™เปเบšเบšเบ›เบปเบเบเบฐเบ•เบด, เปเบฅเบฐ compareWarningMaps() เบ›เบฐเบ•เบดเบšเบฑเบ” ratchet เบ”เบฝเบงเบเบฑเบ™, เบ–เบดเป‰เบกเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบžเปƒเบ™เบ›เบฐเป€เบžเบ”เปƒเบ”เบซเบ™เบถเปˆเบ‡เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡ "ratchet" เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒเบ‚เบญเบ‡เบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™, เบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบทเปเบฅเบฐเป€เบญเบเบฐเบชเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบชเบฐเบเบปเบ”. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบนเป‰, เป€เบกเบทเปˆเบญเบเบงเบ”เบชเบญเบšเบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒ, เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบ„เปเบฒเบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปเบกเปˆเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡; เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบœเบนเป‰เปƒเบŠเป‰. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบชเปˆเบงเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบ›เบฐเบ•เบนเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เบณเบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เป„เบ”เป‰เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰: เปเบฅเปˆเบ™ aspell เบ”เป‰เบงเบเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ เปเบฅเบฐ เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡. เบšเปเปˆเบ„เบงเบ™ เบŠเบญเบเบซเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบชเบฐเบเบปเบ”เบ„เปเบฒ.

เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบชเบฐเบšเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ

เบชเบฐเบซเบผเบธเบšเปเบฅเป‰เบง, เบˆเบธเบ”เบ—เบตเปˆเบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เปเปˆเบชเบปเปˆเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบ™เบงเปƒเบ”, เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบ›เบฑเบšเบ›เบธเบ‡ spontaneous, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบเบญเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบ•เปเปˆเป„เบ›, เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบซเบกเปˆเบญเบฒเบ”เบˆเบฐ "เบ›เบฐเบเบปเบ”เบ‚เบถเป‰เบ™" เบ—เบตเปˆเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบฅเบฐเบซเบฑเบ”, เปเบ•เปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเปƒเบซเบกเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบก - เปเบฅเบฐเบ™เบตเป‰เบˆเบฐเบ—เปเบฒเบฅเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบฎเบฑเบšเป€เบญเบปเบฒเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡ . เบเบฒเบ™เบเบปเบเบฅเบฐเบ”เบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบเบฐเบ—เปเบฒเบ—เบตเปˆเบกเบตเบชเบฐเบ•เบด. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เปเบเป‰เป„เบ‚เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ›เบฐเบเบญเบšเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปเบฅเบฐเบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบš

  • เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบปเบ‡เบ—เบตเปˆเบˆเบฐเบšเปเปˆเบžเบปเบšเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™เปเบฅเบฐเบˆเบฐเบšเปเปˆเบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ”เบฝเบง. เบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบšเบงเบเบเปˆเบฝเบงเบเบฑเบšเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เบปเบ‡เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡.
  • เบเบฒเบ™เบŠเบญเบเบซเบฒเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบšเปเปˆเปเบกเปˆเบ™เบงเบฝเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”; เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบท opensource.
  • เบ›เบฐเบ•เบดเบšเบฑเบ”เบ›เบฐเบ•เบนเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เบปเบ‡เบ—เบตเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ—เปเปˆเบชเบปเปˆเบ‡, เป‚เบ”เบเปƒเบŠเป‰ "ratchet" เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบกเปเบฅเบฐเบ”เบปเบ.

เป€เบญเบเบฐเบชเบฒเบ™

  1. เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡
  2. A. Kudryavtsev: เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป‚เบ„เบ‡เบเบฒเบ™: เบงเบดเบ—เบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบ”เบต เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ” (เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆ static!)

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™