Hackathon DevDays'19 (2-р хэсэг): IntelliJ IDEA дахь Telegram болон дүрмийн шалгалтад зориулсан аудио мессеж задлагч.

Магистрын оюутнуудын оролцсон хаврын хакатон DevDays төслийн талаар бид үргэлжлүүлэн ярьсаар байна. "Програм хангамж хөгжүүлэх / Програм хангамжийн инженерчлэл".

Hackathon DevDays'19 (2-р хэсэг): IntelliJ IDEA дахь Telegram болон дүрмийн шалгалтад зориулсан аудио мессеж задлагч.

Энэ дашрамд уншигч та бүхнийг нэгдэхийг урьж байна VK-магистрын оюутнуудын бүлэг. Үүнд бид ажилд авах, суралцах талаархи хамгийн сүүлийн үеийн мэдээг нийтлэх болно. Нээлттэй өдөрлөгийн видеог мөн группээс үзэх боломжтой. Бид танд сануулж байна: арга хэмжээ 29-р сарын XNUMX-нд болно, дэлгэрэнгүй Онлайн.

Telegram ширээний дуут мессеж задлан шинжлэгч

Hackathon DevDays'19 (2-р хэсэг): IntelliJ IDEA дахь Telegram болон дүрмийн шалгалтад зориулсан аудио мессеж задлагч.

Санаа зохиогч
Хорошев Артём

Тушаалын бүтэц

Хорошев Артем – төслийн менежер/хөгжүүлэгч/ЧА
Елисеев Антон – бизнесийн шинжээч/маркетингийн мэргэжилтэн
Мария Куклина – UI дизайнер/хөгжүүлэгч
Бахвалов Павел - UI дизайнер / хөгжүүлэгч / QA

Бидний үзэж байгаагаар Telegram бол орчин үеийн, тохиромжтой мессенжер бөгөөд түүний PC хувилбар нь түгээмэл бөгөөд нээлттэй эх сурвалж бөгөөд үүнийг өөрчлөх боломжтой болгодог. Үйлчлүүлэгч нь нэлээд баялаг функцийг санал болгодог. Стандарт мессежээс гадна дуут дуудлага, видео мессеж, дуут мессежийг агуулдаг. Сүүлд нь заримдаа хүлээн авагчдад таагүй байдал үүсгэдэг. Компьютер эсвэл зөөврийн компьютер дээр байхдаа дуут мессеж сонсох боломжгүй байдаг. Орчны чимээ шуугиан, чихэвч дутмаг, эсвэл та мессежийн агуулгыг хэнд ч сонсохыг хүсэхгүй байж магадгүй. Хэрэв та ухаалаг гар утсан дээрээ Telegram ашигладаг бол ийм асуудал бараг хэзээ ч гарахгүй, учир нь зөөврийн компьютер эсвэл компьютерээс ялгаатай нь та үүнийг зүгээр л чихэндээ хүргэж болно. Бид энэ асуудлыг шийдэхийг хичээсэн.

DevDays дахь бидний төслийн зорилго нь хүлээн авсан дуут мессежийг Telegram ширээний үйлчлүүлэгч (цаашид Telegram Desktop гэх) руу текст болгон хөрвүүлэх чадварыг нэмэх явдал байв.

Одоогийн байдлаар бүх аналогууд нь аудио мессеж илгээж, хариу мессеж хүлээн авах боломжтой роботууд юм. Үүнд бид тийм ч таатай биш байна: бот руу мессеж дамжуулах нь тийм ч тохиромжтой биш, бид эх функцтэй байхыг хүсч байна. Нэмж дурдахад аливаа робот нь яриа таних API болон хэрэглэгчийн хооронд зуучлагчийн үүрэг гүйцэтгэдэг гуравдагч этгээд бөгөөд энэ нь хамгийн багадаа аюултай юм.

Өмнө дурьдсанчлан, Telegram-desktop нь ажиллахад хялбар, хурд гэсэн хоёр чухал давуу талтай. Энэ нь санамсаргүй хэрэг биш, учир нь энэ нь бүхэлдээ C++ хэл дээр бичигдсэн байдаг. Бид үйлчлүүлэгчид шинэ функцийг шууд нэмэхээр шийдсэн тул үүнийг C++ хэл дээр хөгжүүлэх шаардлагатай болсон.

Hackathon DevDays'19 (2-р хэсэг): IntelliJ IDEA дахь Telegram болон дүрмийн шалгалтад зориулсан аудио мессеж задлагч.Манай багт 4 хүн байсан. Эхэндээ хоёр хүн яриа таних тохиромжтой номын сан хайж байсан бол нэг хүн Telegram-ширээний эх кодыг судалж, нөгөө нь бүтээх төслийг хэрэгжүүлж байв. Telegram Ширээний. Хожим нь бүгд UI-г засах, дибаг хийх гээд завгүй байсан.

Төлөвлөсөн функцийг хэрэгжүүлэх нь тийм ч хэцүү биш юм шиг санагдаж байсан ч үргэлж тохиолддог шиг бэрхшээлүүд гарч ирэв.

Асуудлын шийдэл нь яриа таних тохиромжтой хэрэгслийг сонгох, шинэ функцэд зориулсан UI-г хэрэгжүүлэх гэсэн хоёр бие даасан дэд ажлаас бүрдсэн.

Дууг таних номын санг сонгохдоо хэлний загварууд маш их зай эзэлдэг тул бид бүх офлайн API-аас шууд татгалзах шаардлагатай болсон. Гэхдээ бид зөвхөн нэг хэлний тухай ярьж байна. Бид онлайн API ашиглах ёстой нь тодорхой болсон. Хожим нь Google, Yandex, Microsoft зэрэг аварга том компаниудын яриа таних үйлчилгээ үнэ төлбөргүй байдаггүй тул бид туршилтын хугацаандаа сэтгэл хангалуун байх болно. Үүний үр дүнд Google Speech-To-Text-ийг сонгосон бөгөөд энэ нь танд үйлчилгээг ашиглах токен авах боломжийг олгодог бөгөөд энэ нь бүтэн жилийн турш үйлчлэх болно.

Бидэнд тулгарсан хоёр дахь асуудал нь C++-ийн зарим дутагдалтай холбоотой юм - төвлөрсөн агуулах байхгүй үед төрөл бүрийн номын сангуудын амьтны хүрээлэн. Telegram Desktop нь бусад олон хувилбарт зориулсан номын сангуудаас хамаардаг. Албан ёсны репозитортой гарын авлага төслийг угсрахад зориулагдсан. Мөн түүнчлэн барилгын асуудалтай холбоотой олон тооны нээлттэй асуудлууд, жишээлбэл цаг хугацаа и два. Бүх асуудал нь Ubuntu 14.04 дээр бүтээх скриптийг бичсэнтэй холбоотой байсан бөгөөд Ubuntu 18.04-ийн дагуу телеграммыг амжилттай бүтээхийн тулд өөрчлөлт хийх шаардлагатай болсон.

Telegram Desktop өөрөө угсрахад нэлээд хугацаа шаардагддаг: Intel Core i5-7200U бүхий зөөврийн компьютер дээр бүх хамаарал бүхий бүрэн угсралт (туг -j 4) нь гурван цаг орчим болдог. Эдгээрээс 30 орчим минутыг үйлчлүүлэгч өөрөө холбоход зарцуулдаг (хожим нь Debug тохиргоонд холбоход 10 минут зарцуулдаг болох нь тогтоогдсон) боловч өөрчлөлт хийсний дараа холболтын үе шатыг давтах шаардлагатай болдог.

Асуудалтай байсан ч бид бодсон санаагаа хэрэгжүүлж, шинэчлэлт хийж чадлаа скрипт бүтээх Ubuntu 18.04-д зориулагдсан. Бүтээлийн үзүүлэнг эндээс үзэх боломжтой холбоос. Мөн бид хэд хэдэн хөдөлгөөнт дүрсийг оруулсан. Бүх дуут мессежийн хажууд товчлуур гарч ирсэн бөгөөд энэ нь мессежийг текст болгон хөрвүүлэх боломжийг танд олгоно. Хулганы баруун товчийг дарснаар та өргөн нэвтрүүлэгт хэрэглэгдэх хэлийг нэмж зааж өгч болно. By холбоос үйлчлүүлэгч татаж авах боломжтой.

Хадгалах газар.

Бидний бодлоор энэ нь олон хэрэглэгчдэд тохиромжтой үйл ажиллагааны үзэл баримтлалын сайн нотолгоо болсон юм. Бид үүнийг Telegram Desktop-ийн дараагийн хувилбаруудад харна гэж найдаж байна.

IntelliJ IDEA дахь байгалийн хэлний сайжруулсан дэмжлэг

Hackathon DevDays'19 (2-р хэсэг): IntelliJ IDEA дахь Telegram болон дүрмийн шалгалтад зориулсан аудио мессеж задлагч.

Санаа зохиогч

Танков Владислав

Тушаалын бүтэц

Танков Владислав (багийн ахлагч, LanguageTool болон IntelliJ IDEA-тай хамтран ажилладаг)
Никита Соколов (LanguageTool дээр ажиллаж, UI үүсгэх)
Хворов Александр (LanguageTool-тэй ажиллаж, гүйцэтгэлийг оновчтой болгох)
Садовников Александр (тэмдэглэгээний хэл, кодыг задлан шинжлэхэд дэмжлэг үзүүлэх)

Бид IntelliJ IDEA-д зориулсан залгаасыг боловсруулсан бөгөөд энэ нь янз бүрийн текстийг (тайлбар ба баримт бичиг, код дахь үгийн шугам, Markdown эсвэл XML тэмдэглэгээгээр форматлагдсан текст) дүрмийн, зөв ​​бичих болон найруулгын нарийвчлалыг (англи хэлээр үүнийг засварлах гэж нэрлэдэг) шалгадаг.

Төслийн санаа нь IntelliJ IDEA-ийн стандарт зөв бичгийн алдаа шалгах програмыг Grammarly-ийн хэмжээнд хүртэл өргөжүүлж, IDE дотор нэг төрлийн Grammarly хийх явдал байв.

Юу болсныг харж болно холбоос.

За, доор бид залгаасын боломжууд, түүнчлэн түүнийг үүсгэх явцад үүссэн бэрхшээлүүдийн талаар илүү дэлгэрэнгүй ярих болно.

Хүсэл тэмүүлэл

Байгалийн хэлээр текст бичихэд зориулагдсан олон бүтээгдэхүүн байдаг ч баримтжуулалт болон кодын тайлбарыг ихэвчлэн хөгжүүлэлтийн орчинд бичдэг. Үүний зэрэгцээ, IDE нь кодын алдааг олоход маш сайн ажил хийдэг боловч байгалийн хэл дээрх текстүүдэд тохиромжгүй байдаг. Энэ нь дүрэм, цэг таслал, хэв маягийн алдааг хөгжүүлэх орчныг заагаагүй байхад маш хялбар болгодог. Хэрэглэгчийн интерфейсийг бичихдээ алдаа гаргах нь хамгийн чухал бөгөөд учир нь энэ нь зөвхөн кодыг ойлгоход төдийгүй боловсруулсан програмын хэрэглэгчдэд ч нөлөөлнө.

Хамгийн алдартай, хөгжсөн хөгжүүлэлтийн орчны нэг бол IntelliJ IDEA, мөн IntelliJ платформ дээр суурилсан IDE юм. IntelliJ платформ нь зөв бичгийн дүрмийн алдаа шалгагчтай хэдий ч хамгийн энгийн дүрмийн алдааг ч арилгадаггүй. Бид байгалийн хэлний шинжилгээний түгээмэл системүүдийн нэгийг IntelliJ IDEA-д нэгтгэхээр шийдсэн.

Реализация

Hackathon DevDays'19 (2-р хэсэг): IntelliJ IDEA дахь Telegram болон дүрмийн шалгалтад зориулсан аудио мессеж задлагч.Бид өөрсдийн текст баталгаажуулалтын системийг бий болгох зорилт тавиагүй тул одоо байгаа шийдлийг ашигласан. Хамгийн тохиромжтой сонголт болж хувирав Хэлний хэрэгсэл. Тусгай зөвшөөрөл нь бидэнд үүнийг зорилгодоо чөлөөтэй ашиглах боломжийг олгосон: энэ нь үнэ төлбөргүй, Java дээр бичигдсэн, нээлттэй эх сурвалж юм. Нэмж дурдахад, энэ нь 25 хэлийг дэмждэг бөгөөд арван таван жил гаруйн турш хөгжиж байна. Нээлттэй хэдий ч LanguageTool нь төлбөртэй текст баталгаажуулалтын шийдлүүдийн ноцтой өрсөлдөгч бөгөөд орон нутагт ажиллах боломжтой нь түүний алуурчин шинж чанар юм.

Plugin код байна GitHub дээрх агуулахууд. Төслийг бүхэлд нь UI-д зориулж Java-г бага зэрэг нэмсэнээр Котлин хэл дээр бичсэн. Хакатоны үеэр бид Markdown, JavaDoc, HTML болон Plain Text-ийн дэмжлэгийг хэрэгжүүлж чадсан. Хакатоны дараа томоохон шинэчлэлт нь XML, Java, Kotlin, Python хэл дээрх string literals болон зөв бичгийн алдаа шалгах дэмжлэгийг нэмсэн.

Хэцүү байдал

Хэрэв бид бүх текстийг LanguageTool-д байнга шалгаж өгөх юм бол IDEA интерфэйс нь UI урсгалыг хаадаг тул илүү их эсвэл бага ноцтой текст дээр зогсох болно гэдгийг бид маш хурдан ойлгосон. Асуудлыг `ProgressManager.checkCancelled` шалгалтаар шийдсэн - IDEA шалгалтыг зогсоох цаг болсон гэж үзвэл энэ функц онцгой тохиолдол гаргадаг.

Энэ нь хөлдөлтийг бүрэн арилгасан боловч үүнийг ашиглах боломжгүй: текстийг боловсруулахад маш удаан хугацаа шаардагдана. Түүнээс гадна, манай тохиолдолд текстийн маш бага хэсэг нь ихэвчлэн өөрчлөгддөг бөгөөд бид үр дүнг ямар нэгэн байдлаар кэш хийхийг хүсдэг. Бид яг ийм зүйл хийсэн. Бүх зүйлийг байнга шалгахгүйн тулд бид текстийг тодорхой хэсэг болгон хувааж, зөвхөн өөрчлөгдсөнийг нь шалгадаг. Текстүүд том байж болох тул бид кэшийг ачаалахыг хүсээгүй тул бид текстийг өөрсдөө биш, харин тэдгээрийн хэшийг хадгалсан. Энэ нь залгаасыг том файл дээр ч жигд ажиллуулах боломжийг олгосон.

LanguageTool нь 25-аас дээш хэлийг дэмждэг боловч хэн нэгэн хэрэглэгч бүгдийг нь ашиглах шаардлагагүй. Би хүсэлтийн дагуу тодорхой хэлний номын санг татаж авах боломжийг олгохыг хүссэн (хэрэв та үүнийг UI дээр тэмдэглэвэл). Бид үүнийг хүртэл хэрэгжүүлсэн боловч энэ нь хэтэрхий төвөгтэй, найдваргүй болсон. Ялангуяа бид LanguageTool-ийг тусдаа анги ачаалагч ашиглан шинэ хэлний багцаар ачаалж, дараа нь болгоомжтой эхлүүлэх хэрэгтэй болсон. Үүний зэрэгцээ бүх номын сангууд хэрэглэгчийн .m2 хадгалах санд байсан бөгөөд эхлэх бүртээ бид тэдний бүрэн бүтэн байдлыг шалгах шаардлагатай болсон. Эцэст нь хэлэхэд, хэрэв хэрэглэгчид залгаасын хэмжээтэй холбоотой асуудал гарвал бид хамгийн алдартай хэд хэдэн хэлэнд тусдаа залгаас өгөх болно гэж шийдсэн.

Хакатоны дараа

Хакатон дууссан боловч нэмэлт өргөтгөлийн ажил илүү нарийн багаар үргэлжилсэн. Би мөр, тайлбар, хувьсагч, ангийн нэр гэх мэт хэлний бүтцийг дэмжихийг хүссэн. Одоогоор энэ нь зөвхөн Java, Kotlin болон Python-д дэмжигддэг боловч энэ жагсаалт өснө гэж найдаж байна. Бид маш олон жижиг алдаануудыг засч, Idea-д суулгасан алдаа шалгагчтай илүү нийцтэй болсон. Нэмж дурдахад XML-ийн дэмжлэг, зөв ​​бичгийн дүрмийн алдаа шалгагч гарч ирэв. Энэ бүгдийг бидний саяхан нийтэлсэн хоёр дахь хувилбараас олж болно.

Дараа нь юу юм бэ?

Ийм залгаас нь зөвхөн хөгжүүлэгчдэд төдийгүй техникийн зохиолчдод хэрэгтэй байж болно (ихэнхдээ IDE дээр XML-тэй ажилладаг). Өдөр бүр тэд байгалийн хэлээр ажиллах ёстой бөгөөд алдааны талаар засварлагчийн зөвлөгөө хэлбэрээр туслах ажилтангүй байх ёстой. Манай залгаас нь ийм зөвлөмжийг өгдөг бөгөөд үүнийг өндөр нарийвчлалтайгаар хийдэг.
Бид шинэ хэл нэмэх, текст шалгах ажлыг зохион байгуулах ерөнхий хандлагыг судлах замаар залгаасыг хөгжүүлэхээр төлөвлөж байна. Бидний ойрын төлөвлөгөөнд стилист профайлыг хэрэгжүүлэх (текстийн хэв маягийн удирдамжийг тодорхойлсон дүрмийн багц, жишээ нь "бичихгүй, харин бүрэн хэлбэрийг нь бич"), толь бичгийг өргөжүүлэх, хэрэглэгчийн интерфэйсийг сайжруулах (ялангуяа, Бид хэрэглэгчдэд зөвхөн нэг үгийг үл тоомсорлож зогсохгүй толь бичигт үг хэлэх хэсгийг зааж өгөх боломжийг олгохыг хүсч байна).

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх