JPEG. Алгоритм сТатия

И снова здравствуйтС! Π― нашСл эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π΅Ρ‰Π΅ ΠΌΠ°Π΅ 2019-ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. Π­Ρ‚ΠΎ β€” ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ сСрии статСй ΠΎ WAVE ΠΈ JPEG, Π’ΠΎΡ‚ пСрвая. Π­Ρ‚Π° публикация Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Π² сСбС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ кодирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎ самом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π² Ρ†Π΅Π»ΠΎΠΌ.

Π©Π΅ΠΏΠΎΡ‚ΠΊΡƒ истории

Π‘Ρ‚ΠΎΠ»ΠΎΠ²ΡƒΡŽ Π»ΠΎΠΆΠΊΡƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ:

JPEG (Joint Photographic Experts Group) β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· популярных растровых графичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², примСняСмый для хранСния Ρ„ΠΎΡ‚ΠΎΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ этот стандарт Π±Ρ‹Π» ОбъСдинСнной Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ экспСртов ΠΏΠΎ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π΅Ρ‰Π΅ Π² 1991 Π³ΠΎΠ΄Ρƒ для эффСктивного сТатия ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Какой ΠΏΡƒΡ‚ΡŒ проходят изобраТСния ΠΎΡ‚ сырого Π²ΠΈΠ΄Π° Π΄ΠΎ JPEG

НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ JPEG-ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ β€” сТатыС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° сырыС Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ. ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ сТатиСм Π΄Π°Π½Π½Ρ‹Π΅ проходят Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ.

Π‘Π½Π°Ρ‡Π°Π»Π° Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ модСль ΠΌΠ΅Π½ΡΡŽΡ‚ с RGB Π½Π° YCbCr. Для этого Π΄Π°ΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ β€” здСсь. Y Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΡΡ€ΠΊΠΎΡΡ‚ΡŒ, ΠΈ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ β€” это «ΠΏΡ€ΠΎΡ€Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅» (subsampling). ΠŸΠΎΠ½ΡΡ‚ΡŒ это просто: бСрСтся 2Ρ…2 массив пиксСлСй, Π΄Π°Π»Π΅Π΅ бСрутся Cb ΠΈ Cr β€” срСдниС значСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² YCbCr этих 4 пиксСлСй. И Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ 6 Π±Π°ΠΉΡ‚, вмСсто 4 Y, 4 Cb, 4 Cr ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 4 Y ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Cb ΠΈ Cr (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 β€” 6 = 6). Π’ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°Ρ… Π΄Π°ΠΆΠ΅ 2×2 сТатиС с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ с коэффициСнтом сТатия 2:1 Π·Π²ΡƒΡ‡ΠΈΡ‚ солидно. Π­Ρ‚ΠΎ примСняСтся ΠΊΠΎ всСму ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. И Ρ‚Π°ΠΊ β€” сбросили ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. А Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ благодаря Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΌΡƒ Π²ΠΎΡΠΏΡ€ΠΈΡΡ‚ΠΈΡŽ. Π§Π΅Π»ΠΎΠ²Π΅ΠΊ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² яркости, Π½ΠΎ Π½Π΅ Π² Ρ†Π²Π΅Ρ‚Π΅, Ссли ΠΎΠ½ усрСднСнный Π² малСньком Π±Π»ΠΎΠΊΠ΅ пискСлСй. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ€Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² линию, 4 пиксСля ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π°Ρ‰Π΅. Если Π²Π°ΠΆΠ½ΠΎ качСство изобраТСния, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ€Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π΅ выполняСтся Π²ΠΎΠΎΠ±Ρ‰Π΅.
Наглядная ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ прорСТивания (Π₯Π°Π±Ρ€ Π½Π΅ Π΄Π°Π» Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³ΠΈΡ„ΠΊΡƒ) β€” https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Основная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ

Π”ΠšΠŸ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ самая слоТная ΠΈ нСобходимая Ρ‡Π°ΡΡ‚ΡŒ. Вся ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° разбиваСтся Π½Π° Π±Π»ΠΎΠΊΠΈ 8×8 (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² случаС, Ссли Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΊΡ€Π°Ρ‚Π½ΠΎ сторонС Π±Π»ΠΎΠΊΠ°).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π”ΠšΠŸ (ДискрСтно-косинусноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅). Π’ этой части ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π²Ρ‹Π½ΠΈΠΌΠ°ΡŽΡ‚ всС лишнСС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π”ΠšΠŸ Π½Π°Π΄ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, описываСт Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ (8×8) ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ изобраТСния: Π½Π΅Π±Π°, стСны; ΠΈΠ»ΠΈ ΠΎΠ½ содСрТит ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ структуру (волосы, символы ΠΈ Ρ‚.Π΄.). Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ 64 ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΏΠΎ Ρ†Π²Π΅Ρ‚Ρƒ пиксСлСй ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всСго 1-ΠΈΠΌ, Ρ‚.ΠΊ. Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° ΡƒΠΆΠ΅ извСстСн. Π’ΠΎΡ‚ Π²Π°ΠΌ ΠΈ сТатиС: 64 ΠΊ 1.

Π”ΠšΠŸ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ Π² спСктр, ΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ показания Ρ€Π΅Π·ΠΊΠΎ ΡΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, коэффициСнт становится ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ Ρ‡Π΅ΠΌ Ρ€Π΅Π·Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄. Π’Π°ΠΌ, Π³Π΄Π΅ коэффициСнт Π²Ρ‹ΡˆΠ΅, Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² Ρ†Π²Π΅Ρ‚Π΅ ΠΈ яркости, Π³Π΄Π΅ ΠΎΠ½ Π½ΠΈΠΆΠ΅ β€” слабыС (ΠΏΠ»Π°Π²Π½Ρ‹Π΅) смСны Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² YCbCr Π² Π±Π»ΠΎΠΊΠ΅.

ΠšΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅

Π’ΡƒΡ‚ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ настройки сТатия. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· коэффициСнтов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ† 8×8 дСлится Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ число. Если качСство изобраТСния послС всСх Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π²Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅, Ρ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ. Если Π²Π°ΠΌ Π²Π°ΠΆΠ½Π΅Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ, занимаСмая этой Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠ΅ΠΉ, Ρ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ большС 1, ΠΈ частноС округляСтся. Π’Π°ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ послС округлСния Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ получаСтся ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡƒΠ»Π΅ΠΉ.

ΠšΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅Π»Π°ΡŽΡ‚ для создания возмоТности Π΅Ρ‰Π΅ большСго сТатия. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ квантования Π³Ρ€Π°Ρ„ΠΈΠΊΠ° y = sin(x):

JPEG. Алгоритм сТатия

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Π·ΠΈΠ³-Π·Π°Π³ΠΎΠΌ:

JPEG. Алгоритм сТатия

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с числами. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡƒΠ»Π΅ΠΉ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ. Для этого вмСсто ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· мноТСства Π½ΡƒΠ»Π΅ΠΉ ΠΌΡ‹ вписываСм 1 Π½ΡƒΠ»ΡŒ ΠΈ послС Π½Π΅Π³ΠΎ число, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ ΠΈΡ… количСство Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΄ΠΎ 1/3 Ρ€Π°Π·ΠΌΠ΅Ρ€Π° всСго массива. А дальшС просто сТимаСт этот массив ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° ΠΈ вписываСм ΡƒΠΆΠ΅ Π² сам Ρ„Π°ΠΉΠ».

Π“Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

Π’Π΅Π·Π΄Π΅. Как ΠΈ PNG, JPEG ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ„ΠΎΡ‚ΠΎΠΊΠ°ΠΌΠ΅Ρ€Π°Ρ…, OS’ях (Π² качСствС Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΈΠΊΠΎΠ½ΠΎΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, thumbnail’ΠΎΠ²) ΠΈ Π²ΠΎ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сфСрах, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ эффСктивно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ изобраТСния.

Π’Ρ‹Π²ΠΎΠ΄

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ знания ΠΎ JPEG сСйчас Ρ†Π΅Π½Π½Ρ‹ лишь Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях, вСдь ΠΎΠ½ ΡƒΠΆΠ΅ Π²Π΅Π·Π΄Π΅ встроСн ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ большими Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ людСй, Π½ΠΎ Π³Ρ€Π°Π½ΠΈΡ‚ Π½Π°ΡƒΠΊΠΈ всС-ΠΆΠ΅ вкусный.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ YCbCr Π½Π° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ
Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΎ JPEG Π½Π° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ
НСмного ΠΏΡ€ΠΎ Π”ΠšΠŸ с поста ΠŸΠΈΠΊΠ°Π±Ρƒ
Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΎ Π”ΠšΠŸ Π½Π° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ