Hackathon DevDays'19 (2 කොටස): Telegram සඳහා ශ්‍රව්‍ය පණිවිඩ විග්‍රහකය සහ IntelliJ IDEA හි ව්‍යාකරණ පරීක්ෂා කිරීම

මාස්ටර් වැඩසටහනේ සිසුන් සහභාගී වූ වසන්ත හැකතන් DevDays හි ව්‍යාපෘති ගැන අපි දිගටම කතා කරමු "මෘදුකාංග සංවර්ධනය / මෘදුකාංග ඉංජිනේරු".

Hackathon DevDays'19 (2 කොටස): Telegram සඳහා ශ්‍රව්‍ය පණිවිඩ විග්‍රහකය සහ IntelliJ IDEA හි ව්‍යාකරණ පරීක්ෂා කිරීම

මාර්ගය වන විට, අපි පාඨකයින්ට එක්වන ලෙස ආරාධනා කිරීමට කැමැත්තෙමු මාස්ටර් සිසුන්ගේ VK කණ්ඩායම. එහි අපි බඳවා ගැනීම් සහ අධ්‍යයනය පිළිබඳ නවතම පුවත් පළ කරන්නෙමු. විවෘත දිනයේ වීඩියෝවක් ද සමූහයේ සොයාගත හැකිය. අපි ඔබට මතක් කරමු: උත්සවය අප්රේල් 29 වන දින සිදුවනු ඇත, විස්තර ඔන්ලයින්.

Telegram Desktop Voice Message Parser

Hackathon DevDays'19 (2 කොටස): Telegram සඳහා ශ්‍රව්‍ය පණිවිඩ විග්‍රහකය සහ IntelliJ IDEA හි ව්‍යාකරණ පරීක්ෂා කිරීම

අදහසේ කර්තෘ
Khoroshev Artyom

පේලි ගැහෙන්න

Khoroshev Artem - ව්යාපෘති කළමනාකරු / සංවර්ධක / QA
Eliseev Anton - ව්‍යාපාර විශ්ලේෂක/අලෙවිකරණ විශේෂඥ
මාරියා කුක්ලිනා - UI නිර්මාණකරු / සංවර්ධක
Bakhvalov Pavel - UI නිර්මාණකරු/සංවර්ධක/QA

අපගේ දෘෂ්ටි කෝණයෙන්, ටෙලිග්‍රාම් යනු නවීන සහ පහසු පණිවිඩකරුවෙකු වන අතර එහි PC අනුවාදය ජනප්‍රිය සහ විවෘත මූලාශ්‍රය වන අතර එමඟින් එය වෙනස් කිරීමට හැකි වේ. සේවාදායකයා තරමක් පොහොසත් ක්‍රියාකාරීත්වයක් ලබා දෙයි. සම්මත කෙටි පණිවුඩ වලට අමතරව, එය හඬ ඇමතුම්, වීඩියෝ පණිවිඩ සහ හඬ පණිවිඩ අඩංගු වේ. සමහර විට ඔවුන්ගේ ලබන්නාට අපහසුතාවයක් ගෙන එන්නේ දෙවැන්නයි. පරිගණකයක හෝ ලැප්ටොප් පරිගණකයක සිටියදී හඬ පණිවිඩයකට සවන් දීමට බොහෝ විට නොහැකි ය. අවට ශබ්දය, හෙඩ්ෆෝන් නොමැතිකම හෝ පණිවිඩයේ අන්තර්ගතය කිසිවෙකුට ඇසීමට ඔබට අවශ්‍ය නැත. ඔබ ස්මාර්ට් ජංගම දුරකතනයේ ටෙලිග්‍රාම් භාවිතා කරන්නේ නම් එවැනි ගැටළු කිසි විටෙකත් මතු නොවේ, මන්ද ඔබට එය ලැප්ටොප් හෝ පරිගණකයක් මෙන් නොව එය ඔබේ කනට ගෙන යා හැකිය. අපි මේ ගැටලුව විසඳීමට උත්සාහ කළා.

DevDays හි අපගේ ව්‍යාපෘතියේ අරමුණ වූයේ Telegram ඩෙස්ක්ටොප් සේවාලාභියා වෙත ලැබුණු හඬ පණිවිඩ පෙළ බවට පරිවර්තනය කිරීමේ හැකියාව එක් කිරීමයි (මෙතැන් සිට Telegram Desktop ලෙස හැඳින්වේ).

මේ මොහොතේ ඇති සියලුම ප්‍රතිසමයන් ඔබට ශ්‍රව්‍ය පණිවිඩයක් යැවීමට සහ ප්‍රතිචාර වශයෙන් පෙළක් ලබා ගත හැකි බොට් වේ. අපි මේ ගැන එතරම් සතුටු නොවෙමු: පණිවිඩයක් බොට් වෙත යොමු කිරීම එතරම් පහසු නැත; අපි ස්වදේශීය ක්‍රියාකාරීත්වය ලබා ගැනීමට කැමතියි. මීට අමතරව, ඕනෑම බොට් එකක් කථන හඳුනාගැනීමේ API සහ පරිශීලකයා අතර අතරමැදියෙකු ලෙස ක්‍රියා කරන තෙවන පාර්ශවයක් වන අතර මෙය අවම වශයෙන් අනාරක්ෂිත වේ.

කලින් සඳහන් කළ පරිදි, ටෙලිග්‍රාම්-ඩෙස්ක්ටොප් එකට සැලකිය යුතු වාසි දෙකක් ඇත: ක්‍රියාකාරීත්වයේ පහසුව සහ වේගය. මෙය අහම්බයක් නොවේ, මන්ද එය සම්පූර්ණයෙන්ම C++ වලින් ලියා ඇත. තවද අපි නව ක්‍රියාකාරීත්වය සෘජුවම සේවාදායකයා වෙත එක් කිරීමට තීරණය කළ බැවින්, අපට එය C++ හි සංවර්ධනය කිරීමට සිදු විය.

Hackathon DevDays'19 (2 කොටස): Telegram සඳහා ශ්‍රව්‍ය පණිවිඩ විග්‍රහකය සහ IntelliJ IDEA හි ව්‍යාකරණ පරීක්ෂා කිරීමඅපේ කණ්ඩායමේ 4 දෙනෙක් හිටියා. මුලදී, පුද්ගලයන් දෙදෙනෙකු කථන හඳුනාගැනීම සඳහා සුදුසු පුස්තකාලයක් සොයමින් සිටි අතර, එක් අයෙක් ටෙලිග්‍රාම්-ඩෙස්ක්ටොප් හි ප්‍රභව කේතය අධ්‍යයනය කරමින් සිටියේය, තවත් අයෙක් ගොඩනැගීම ව්‍යාපෘතිය යොදවා සිටියේය. ටෙලිග්රෑම් ඩෙස්ක්ටොප්. පසුව, සියලු දෙනා UI සවි කිරීම සහ දෝෂහරණය කිරීමේ කාර්යබහුල විය.

අපේක්ෂිත ක්රියාකාරිත්වය ක්රියාත්මක කිරීම අපහසු නොවන බව පෙනෙන්නට තිබුණත්, සෑම විටම සිදු වන පරිදි, දුෂ්කරතා මතු විය.

ගැටලුවට විසඳුම ස්වාධීන උප කාර්යයන් දෙකකින් සමන්විත විය: සුදුසු කථන හඳුනාගැනීමේ මෙවලමක් තෝරාගැනීම සහ නව ක්රියාකාරිත්වය සඳහා UI ක්රියාත්මක කිරීම.

කටහඬ හඳුනාගැනීම සඳහා පුස්තකාලයක් තෝරාගැනීමේදී, භාෂා ආකෘති විශාල ඉඩක් ගන්නා බැවින්, සියලුම නොබැඳි API අත්හැරීමට අපට වහාම සිදු විය. නමුත් අපි කතා කරන්නේ එක් භාෂාවක් ගැන පමණයි. අපට මාර්ගගත API භාවිතා කිරීමට සිදුවන බව පැහැදිලි විය. ගූගල්, යාන්ඩෙක්ස් සහ මයික්‍රොසොෆ්ට් වැනි දැවැන්තයන්ගේ කථන හඳුනාගැනීමේ සේවාවන් කිසිසේත් නොමිලේ නොවන බවත්, අපට අත්හදා බැලීමේ කාල සීමාවකින් සෑහීමට පත් විය යුතු බවත් පසුව පෙනී ගියේය. එහි ප්‍රතිඵලයක් වශයෙන්, Google Speech-to-Text තෝරාගෙන ඇත්තේ එය ඔබට සේවාව භාවිතා කිරීම සඳහා ටෝකනයක් ලබා ගැනීමට ඉඩ සලසන බැවිනි, එය වසරක් පුරා පවතිනු ඇත.

අපට හමු වූ දෙවන ගැටළුව C++ හි සමහර අඩුපාඩු හා සම්බන්ධ වේ - මධ්‍යගත ගබඩාවක් නොමැති විට විවිධ පුස්තකාලවල සත්වෝද්‍යානයකි. ටෙලිග්‍රාම් ඩෙස්ක්ටොප් එක වෙනත් බොහෝ අනුවාද-විශේෂිත පුස්තකාල මත රඳා පවතී. නිල ගබඩාව සතුව ඇත අත්පොත ව්යාපෘතිය එකලස් කිරීම සඳහා. තවද ගොඩනැගීමේ ගැටළු පිළිබඳ විවෘත ගැටළු විශාල ප්‍රමාණයක්, උදාහරණයක් ලෙස වාරයක් и два. සියලුම ගැටළු Ubuntu 14.04 සඳහා ගොඩනැගීමේ ස්ක්‍රිප්ට් ලියා තිබීම හා Ubuntu 18.04 යටතේ ටෙලිග්‍රාම් සාර්ථකව ගොඩ නැගීම සඳහා වෙනස්කම් සිදු කිරීමට සිදු විය.

ටෙලිග්‍රාම් ඩෙස්ක්ටොප් එක එකලස් කිරීමට සෑහෙන කාලයක් ගතවේ: Intel Core i5-7200U සහිත ලැප්ටොප් එකක, සියලු පරායත්තයන් සහිත සම්පූර්ණ එකලස් කිරීම (ධජය -j 4) පැය තුනක් පමණ ගත වේ. මෙයින්, සේවාදායකයා සම්බන්ධ කිරීමෙන් මිනිත්තු 30 ක් පමණ ගත වේ (පසුකාලීනව එය නිදොස් කිරීමේ වින්‍යාසයේදී, සම්බන්ධ කිරීමට මිනිත්තු 10 ක් පමණ ගත වන බව පෙනී ගියේය), නමුත් වෙනස්කම් සිදු කිරීමෙන් පසු සෑම අවස්ථාවකම සම්බන්ධ කිරීමේ අදියර නැවත නැවතත් කළ යුතුය.

ගැටළු තිබියදීත්, සංකල්පිත අදහස ක්‍රියාත්මක කිරීමට මෙන්ම යාවත්කාලීන කිරීමට අපි සමත් විය ස්ක්‍රිප්ට් ගොඩනැගීම Ubuntu 18.04 සඳහා. කාර්යයේ නිරූපණයක් දැකිය හැකිය ලින්ක්. අපි සජීවිකරණ කිහිපයක් ද ඇතුළත් කරමු. සියලුම හඬ පණිවිඩ අසල බොත්තමක් දර්ශනය වී ඇති අතර, ඔබට පණිවිඩය පෙළට පරිවර්තනය කිරීමට ඉඩ සලසයි. දකුණු-ක්ලික් කිරීමෙන්, ඔබට විකාශනය සඳහා භාවිතා කරන භාෂාව අතිරේකව සඳහන් කළ හැකිය. විසින් ලින්ක් බාගත කිරීම සඳහා සේවාලාභියා තිබේ.

ගබඩාව.

අපගේ මතය අනුව, එය බොහෝ පරිශීලකයින්ට පහසු වන ක්‍රියාකාරීත්වය පිළිබඳ සංකල්පයේ හොඳ සාක්ෂියක් බවට පත් විය. Telegram Desktop හි ඉදිරි නිකුතු වලදී එය දැකීමට අපි බලාපොරොත්තු වෙමු.

IntelliJ IDEA හි වැඩිදියුණු කළ ස්වභාවික භාෂා සහාය

Hackathon DevDays'19 (2 කොටස): Telegram සඳහා ශ්‍රව්‍ය පණිවිඩ විග්‍රහකය සහ IntelliJ IDEA හි ව්‍යාකරණ පරීක්ෂා කිරීම

අදහසේ කර්තෘ

ටැන්කොව් ව්ලැඩිස්ලාව්

පේලි ගැහෙන්න

Tankov Vladislav (කණ්ඩායම් නායකත්වය, LanguageTool සහ IntelliJ IDEA සමඟ වැඩ කිරීම)
Nikita Sokolov (LanguageTool සමඟ වැඩ කිරීම සහ UI නිර්මාණය කිරීම)
Khvorov Alexander (LanguageTool සමඟ වැඩ කිරීම සහ කාර්ය සාධනය ප්‍රශස්ත කිරීම)
Sadovnikov ඇලෙක්සැන්ඩර් (සංකේත භාෂා සහ කේතය විග්‍රහ කිරීමට සහාය)

ව්‍යාකරණ, අක්ෂර වින්‍යාස සහ ශෛලීය නිරවද්‍යතාවය සඳහා (ඉංග්‍රීසියෙන් මෙය සෝදුපත් කියවීම ලෙස හැඳින්වේ) විවිධ පෙළ (අදහස් සහ ප්‍රලේඛන, කේතවල වචනාර්ථ රේඛා, මාර්ක්ඩවුන් හෝ XML මාර්ක්අප් හි ආකෘතිගත කර ඇත) පරීක්ෂා කරන ප්ලගිනයක් අපි IntelliJ IDEA සඳහා සංවර්ධනය කර ඇත.

ව්‍යාපෘතියේ අදහස වූයේ සම්මත අක්ෂර වින්‍යාස පරීක්‍ෂාව IntelliJ IDEA ව්‍යාකරණ පරිමාණය දක්වා පුළුල් කිරීම, IDE තුළ ව්‍යාකරණ වර්ගයක් සෑදීමයි.

මොකද වුණේ කියලා බලන්න පුළුවන් ලින්ක්.

හොඳයි, පහත අපි ප්ලගිනයේ හැකියාවන් මෙන්ම එය නිර්මාණය කිරීමේදී ඇති වූ දුෂ්කරතා පිළිබඳව වඩාත් විස්තරාත්මකව කතා කරමු.

අභිප්රේරණය

ස්වාභාවික භාෂාවලින් පෙළ ලිවීම සඳහා නිර්මාණය කර ඇති බොහෝ නිෂ්පාදන ඇත, නමුත් ලේඛන සහ කේත අදහස් බොහෝ විට ලියා ඇත්තේ සංවර්ධන පරිසරයන් තුළ ය. ඒ අතරම, IDE මඟින් කේතයේ දෝෂ සෙවීමේ විශිෂ්ට කාර්යයක් ඉටු කරයි, නමුත් ස්වභාවික භාෂාවලින් පෙළ සඳහා දුර්වල ලෙස සුදුසු වේ. සංවර්ධන පරිසරය පෙන්වා නොදී ව්‍යාකරණ, විරාම ලකුණු හෝ ශෛලියේ වැරදි සිදු කිරීම මෙය ඉතා පහසු කරයි. පරිශීලක අතුරුමුහුණත ලිවීමේදී වැරැද්දක් කිරීම වඩාත් තීරණාත්මක ය, මන්ද මෙය කේතයේ අවබෝධයට පමණක් නොව සංවර්ධිත යෙදුමේ පරිශීලකයින්ට ද බලපානු ඇත.

වඩාත් ජනප්‍රිය සහ සංවර්ධිත සංවර්ධන පරිසරයක් වන්නේ IntelliJ IDEA මෙන්ම IntelliJ වේදිකාව මත පදනම් වූ IDE ය. IntelliJ Platform හි දැනටමත් සවි කර ඇති අක්ෂර වින්‍යාස පරීක්ෂකයක් ඇත, නමුත් එය සරලම ව්‍යාකරණ දෝෂ පවා ඉවත් නොකරයි. අපි ජනප්‍රිය ස්වභාවික භාෂා විශ්ලේෂණ පද්ධතියක් IntelliJ IDEA වෙත ඒකාබද්ධ කිරීමට තීරණය කළෙමු.

Реализация

Hackathon DevDays'19 (2 කොටස): Telegram සඳහා ශ්‍රව්‍ය පණිවිඩ විග්‍රහකය සහ IntelliJ IDEA හි ව්‍යාකරණ පරීක්ෂා කිරීමඅපගේම පෙළ සත්‍යාපන පද්ධතියක් නිර්මාණය කිරීමේ කාර්යය අප විසින්ම සකසා නොගත් නිසා අපි පවතින විසඳුමක් භාවිතා කළෙමු. වඩාත්ම සුදුසු විකල්පය බවට පත් විය භාෂා ටූල්. බලපත්‍රය අපගේ අරමුණු සඳහා එය නිදහසේ භාවිතා කිරීමට අපට අවසර දී ඇත: එය නොමිලේ, ජාවා සහ විවෘත මූලාශ්‍ර වලින් ලියා ඇත. ඊට අමතරව, එය භාෂා 25 කට සහය දක්වන අතර වසර පහළොවකට වැඩි කාලයක් සංවර්ධනය වෙමින් පවතී. එහි විවෘතභාවය තිබියදීත්, LanguageTool යනු ගෙවන ලද පෙළ සත්‍යාපන විසඳුම් සඳහා බරපතල තරඟකරුවෙකු වන අතර එයට දේශීයව ක්‍රියා කළ හැකි වීම වචනාර්ථයෙන් එහි මාරක ලක්ෂණයයි.

ප්ලගින කේතය ඇත GitHub මත ගබඩා. UI සඳහා ජාවා කුඩා එකතු කිරීමකින් මුළු ව්‍යාපෘතියම Kotlin වලින් ලියා ඇත. Hackathon අතරතුර, Markdown, JavaDoc, HTML සහ Plain Text සඳහා සහය ක්‍රියාත්මක කිරීමට අපට හැකි විය. Hackathon වලින් පසුව, ප්‍රධාන යාවත්කාලීනයක් XML සඳහා සහය එක් කරන ලදී, Java, Kotlin සහ Python හි තන්තු වචන සහ අක්ෂර වින්‍යාස පරීක්ෂා කිරීම.

දුෂ්කරතා

අපි සෑම විටම පරීක්ෂා කිරීම සඳහා සියලුම පෙළ LanguageTool වෙත සංග්‍රහ කළහොත්, පරීක්‍ෂණයම UI ප්‍රවාහය අවහිර කරන බැවින්, IDEA අතුරුමුහුණත ඕනෑම වැඩි හෝ අඩු බරපතල පෙළක් මත කැටි වන බව ඉතා ඉක්මනින් අපට වැටහුණි. ගැටලුව විසඳා ඇත්තේ 'ProgressManager.checkCancelled' චෙක්පත හරහාය - IDEA පරීක්‍ෂණය නතර කිරීමට කාලය පැමිණ ඇතැයි විශ්වාස කරන්නේ නම් මෙම කාර්යය ව්‍යතිරේකයක් විසි කරයි.

මෙය කැටි කිරීම සම්පූර්ණයෙන්ම ඉවත් කරයි, නමුත් එය භාවිතා කළ නොහැක: පෙළ සැකසීමට ඉතා දිගු කාලයක් ගතවේ. එපමනක් නොව, අපගේ නඩුවේදී, බොහෝ විට පෙළෙහි ඉතා කුඩා කොටසක් වෙනස් වන අතර අපට කෙසේ හෝ ප්රතිඵල හැඹිලිගත කිරීමට අවශ්ය වේ. ඒක තමයි අපි හරියටම කළේ. සෑම විටම සෑම දෙයක්ම පරීක්ෂා නොකිරීමට, අපි නියත වශයෙන්ම පෙළ කොටස් වලට බෙදා වෙනස් වූ ඒවා පමණක් පරීක්ෂා කළෙමු. පෙළ විශාල විය හැකි අතර අපට හැඹිලිය පැටවීමට අවශ්‍ය නොවූ බැවින්, අපි ගබඩා කළේ පෙළ නොව ඒවායේ හෑෂ් ය. මෙම ප්ලගිනය විශාල ගොනු මත පවා සුමට ලෙස ක්රියා කිරීමට ඉඩ ලබා දුන්නේය.

LanguageTool භාෂා 25කට වඩා සහය දක්වයි, නමුත් එක් පරිශීලකයෙකුට ඒවා සියල්ලම අවශ්‍ය වේ යැයි සිතිය නොහැක. මට ඉල්ලීමක් මත නිශ්චිත භාෂාවක් සඳහා පුස්තකාල බාගත කිරීමට අවස්ථාව ලබා දීමට අවශ්‍ය විය (ඔබ එය UI හි සලකුණු කළහොත්). අපි මෙය පවා ක්‍රියාත්මක කළ නමුත් එය ඉතා සංකීර්ණ හා විශ්වාස කළ නොහැකි දෙයක් බවට පත් විය. විශේෂයෙන්, අපට වෙනම පන්ති කාරකයක් භාවිතා කරමින් නව භාෂා කට්ටලයක් සමඟ LanguageTool පැටවීමට සිදු විය, පසුව එය ප්‍රවේශමෙන් ආරම්භ කරන්න. ඒ අතරම, සියලුම පුස්තකාල පරිශීලක .m2 ගබඩාවක තිබූ අතර, සෑම ආරම්භයේදීම අපට ඒවායේ අඛණ්ඩතාව පරීක්ෂා කිරීමට සිදු විය. අවසානයේදී, අපි තීරණය කළේ පරිශීලකයින්ට ප්ලගිනයේ ප්‍රමාණය පිළිබඳ ගැටළු තිබේ නම්, අපි වඩාත් ජනප්‍රිය භාෂා කිහිපයක් සඳහා වෙනම ප්ලගිනයක් ලබා දෙන බවයි.

හැකතන් එකෙන් පස්සේ

Hackathon අවසන්, නමුත් ප්ලගිනය මත වැඩ පටු කණ්ඩායමක් සමඟ දිගටම කරගෙන ගියේය. මට අවශ්‍ය වූයේ තන්තු, අදහස්, සහ විචල්‍ය සහ පන්ති නම් වැනි භාෂා නිර්මාණ සඳහා පවා සහාය දැක්වීමටය. දැනට මෙය Java, Kotlin සහ Python සඳහා පමණක් සහය දක්වයි, නමුත් මෙම ලැයිස්තුව වර්ධනය වනු ඇතැයි අපි බලාපොරොත්තු වෙමු. අපි කුඩා දෝෂ බොහොමයක් නිවැරදි කර ඇති අතර Idea හි ඇති අක්ෂර වින්‍යාස පරීක්ෂකය සමඟ වඩාත් ගැළපෙන්නෙමු. ඊට අමතරව, XML සහාය සහ අක්ෂර වින්‍යාසය පරීක්ෂා කිරීම දර්ශනය වී ඇත. මේ සියල්ල අප විසින් මෑතකදී ප්‍රකාශයට පත් කරන ලද දෙවන අනුවාදයෙන් සොයාගත හැකිය.

ඊළඟට කුමක්ද?

එවැනි ප්ලගිනයක් සංවර්ධකයින් සඳහා පමණක් නොව, තාක්ෂණික ලේඛකයින් සඳහාද ප්රයෝජනවත් විය හැකිය (බොහෝ විට වැඩ කිරීම, උදාහරණයක් ලෙස, IDE හි XML සමඟ). හැකි දෝෂ පිළිබඳව සංස්කාරක ඉඟි ආකාරයෙන් සහායකයකු නොමැතිව සෑම දිනකම ඔවුන්ට ස්වභාවික භාෂාවෙන් වැඩ කිරීමට සිදු වේ. අපගේ ප්ලගිනය එවැනි ඉඟි සපයන අතර ඉහළ නිරවද්‍යතාවයකින් එය සිදු කරයි.
නව භාෂා එකතු කිරීමෙන් සහ පෙළ පරීක්ෂා කිරීම සංවිධානය කිරීම සඳහා සාමාන්‍ය ප්‍රවේශයක් ගවේෂණය කිරීමෙන් අපි ප්ලගිනය සංවර්ධනය කිරීමට සැලසුම් කරමු. අපගේ ක්ෂණික සැලසුම්වලට ශෛලීය පැතිකඩ ක්‍රියාත්මක කිරීම (පෙළ සඳහා ශෛලීය මාර්ගෝපදේශයක් නිර්වචනය කරන රීති කට්ටල, උදාහරණයක් ලෙස, “උදා: ලියන්න එපා, නමුත් සම්පූර්ණ පෝරමය ලියන්න”), ශබ්දකෝෂය පුළුල් කිරීම සහ පරිශීලක අතුරුමුහුණත වැඩිදියුණු කිරීම (විශේෂයෙන්, වචනයක් නොසලකා හැරීමට පමණක් නොව, එය ශබ්ද කෝෂයට එකතු කිරීමට පරිශීලකයාට අවස්ථාව ලබා දීමට අපට අවශ්‍යය.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න