Hackathon DevDays'19 (beş 2): parsera peyama dengî ji bo kontrolkirina Telegram û rêzimanê di IntelliJ IDEA de

Em berdewam dikin ku li ser projeyên Hackathona biharê DevDays, ku tê de xwendekarên bernameya masterê beşdar bûne, biaxivin. "Pêşvebirina Nermalavê / Endezyariya Nermalavê".

Hackathon DevDays'19 (beş 2): parsera peyama dengî ji bo kontrolkirina Telegram û rêzimanê di IntelliJ IDEA de

Bi awayê, em dixwazin xwendevanan vexwînin ku beşdarî bibin Koma VK ya xwendekarên masterê. Di wê de em ê nûçeyên herî dawî yên li ser leşkerkirin û xwendinê biweşînin. Vîdyoyek ji roja vekirî jî dikare di komê de were dîtin. Em bi bîr tînin: bûyer dê di 29ê Avrêlê de, hûrgulî pêk were bike.

Parsera Peyama Dengê Sermaseya Telegram

Hackathon DevDays'19 (beş 2): parsera peyama dengî ji bo kontrolkirina Telegram û rêzimanê di IntelliJ IDEA de

Nivîskarê ramanê
Khoroshev Artyom

Berdewam dibe

Khoroshev Artem - rêveberê projeyê / pêşdebir / QA
Eliseev Anton - analîstê karsaziyê / pisporê kirrûbirrê
Maria Kuklina - sêwiraner / pêşdebirkerê UI
Bakhvalov Pavel - sêwiranerê UI / pêşdebir / QA

Li gorî nêrîna me, Telegram peyamberek nûjen û hêsan e, û guhertoya wê ya PC-ya populer û çavkaniya vekirî ye, ku guheztina wê gengaz dike. Xerîdar fonksiyonek pir dewlemend pêşkêşî dike. Ji bilî peyamên nivîsê yên standard, ew bangên deng, peyamên vîdyoyê û peyamên deng vedihewîne. Û ev ya paşîn e ku carinan nerehetiyê ji wergirê wan re tîne. Dema ku hûn li ser komputer an laptopê ne pir caran ne gengaz e ku meriv li peyamek dengek guhdarî bike. Dibe ku dengê hawîrdorê, nebûna guhê, an jî hûn naxwazin kes naveroka peyamê bibihîze. Heke hûn Telegram-ê li ser têlefonek têlefonê bikar bînin, hema hema tu carî pirsgirêk dernakeve, ji ber ku hûn dikarin wê bi hêsanî bînin ber guhê xwe, berevajî laptopek an PC-yê. Me hewl da ku vê pirsgirêkê çareser bikin.

Armanca projeya me li DevDays ev bû ku em jêhatîbûna wergerandina peyamên dengî yên wergirtî li nivîsê li xerîdara sermaseya Telegram (ji vir şûnde wekî Telegram Desktop tê binav kirin) zêde bikin.

Hemî analogên vê gavê bot in ku hûn dikarin ji wan re peyamek dengî bişînin û di bersivê de nivîsek bistînin. Em ji vê yekê pir ne kêfxweş in: şandina peyamek ji botekek ne pir hêsan e; em dixwazin fonksiyonek xwemalî hebe. Wekî din, her bot partiyek sêyemîn e ku di navbera API-ya naskirina axaftinê û bikarhêner de wekî navbeynkar tevdigere, û ev, bi kêmanî, ne ewledar e.

Wekî ku berê hate destnîşan kirin, telegram-desktop du avantajên girîng hene: hêsan û leza xebatê. Û ev ne tesaduf e, ji ber ku bi tevahî di C++ de hatiye nivîsandin. Û ji ber ku me biryar da ku fonksiyonên nû rasterast li xerîdar zêde bikin, me neçar ma ku wê di C++ de pêşve bixin.

Hackathon DevDays'19 (beş 2): parsera peyama dengî ji bo kontrolkirina Telegram û rêzimanê di IntelliJ IDEA deDi koma me de 4 kes hebûn. Di destpêkê de, du kes li pirtûkxaneyek minasib ji bo naskirina axaftinê digeriyan, kesek koda çavkaniyê ya Telegram-sermaseyê dixwend, yekî din projeya avakirinê bi cih dikir. Desktop Desktop. Dûv re, her kes bi rastkirina UI û xeletkirinê mijûl bû.

Wusa dixuye ku pêkanîna fonksiyona armanckirî dê ne dijwar be, lê, wekî her gav diqewime, dijwarî derketin.

Çareseriya pirsgirêkê ji du binxebatên serbixwe pêk dihat: Hilbijartina amûrek nasîna axaftinê ya maqûl û pêkanîna UI ji bo fonksiyona nû.

Dema ku pirtûkxaneyek ji bo naskirina deng hildibijêrin, me neçar ma ku tavilê dev ji hemî API-yên negirêdayî berdin, ji ber ku modelên zimên gelek cîh digirin. Lê em tenê behsa zimanekî dikin. Diyar bû ku em neçar in ku API-ya serhêl bikar bînin. Dûv re derket holê ku karûbarên naskirina axaftinê yên dêwên wekî Google, Yandex û Microsoft qet ne belaş in, û em ê neçar bin ku bi serdemek ceribandinê razî bin. Wekî encamek, Google Speech-To-Text hate hilbijartin ji ber ku ew dihêle hûn ji bo karanîna karûbarê nîşanek bistînin, ku dê salek tevahî bimîne.

Pirsgirêka duyemîn ku em pê re rû bi rû ne bi hin kêmasiyên C++ ve girêdayî ye - zozanek pirtûkxaneyên cihêreng di nebûna depoyek navendî de. Wusa diqewime ku Sermaseya Telegram bi gelek pirtûkxaneyên guherto-taybet ên din ve girêdayî ye. Depoya fermî heye destûra ji bo komkirina projeyê. Û her weha hejmareke mezin ji pirsgirêkên vekirî yên di derbarê pirsgirêkên avakirinê de, mînakî carinan и два. Hemî pirsgirêk derketin ku bi vê yekê ve girêdayî bûn ku skrîpta çêkirinê ji bo Ubuntu 14.04 hatî nivîsandin, û ji bo ku di bin Ubuntu 18.04 de telegram bi serfirazî were çêkirin, diviyabû ku guhertin çêbibin.

Sermaseya Telegram bixwe demek pir dirêj digire ku were berhev kirin: li ser laptopek bi Intel Core i5-7200U, kombûna bêkêmasî (ala -j 4) bi hemî ve girêdayî bi qasî sê demjimêran digire. Ji van, nêzîkê 30 hûrdeman bi girêdana xerîdar bixwe têne girtin (paşê derket holê ku di veavakirina Debug de, girêdan bi qasî 10 hûrdem digire), lê qonaxa girêdanê divê her carê piştî guheztinê were dubare kirin.

Digel pirsgirêkan, me karî ku ramana hatî çêkirin û her weha nûvekirin bicîh bînin script build ji bo Ubuntu 18.04. Pêşandanek xebatê dikare li ser were dîtin link. Di heman demê de em çend anîmasyon jî vedigirin. Bişkokek li tenişta hemî peyamên deng xuya bûye, ku dihêle hûn peyamê wergerînin nivîsê. Bi klîkkirina rastê, hûn dikarin zimanê ku dê ji bo weşanê were bikar anîn destnîşan bikin. Ji link muwekîlê ji bo daxistinê heye.

Depo.

Li gorî me, derket holê ku ew îsbatek baş a têgîna fonksiyonê ye ku dê ji bo gelek bikarhêneran rehet be. Em hêvî dikin ku wê di weşanên pêşerojê yên Telegram Desktop de bibînin.

Piştgiriya Zimanê Xwezayî ya Pêşkeftî di IntelliJ IDEA de

Hackathon DevDays'19 (beş 2): parsera peyama dengî ji bo kontrolkirina Telegram û rêzimanê di IntelliJ IDEA de

Nivîskarê ramanê

Tankov Vladislav

Berdewam dibe

Tankov Vladislav (serokê tîmê, bi LanguageTool û IntelliJ IDEA re dixebite)
Nikita Sokolov (bi LanguageTool re dixebite û UI diafirîne)
Khvorov Alexander (bi LanguageTool re dixebite û performansê xweşbîn dike)
Sadovnikov Alexander (piştgiriya parkirina zimanên nîşankirinê û kodê)

Me ji bo IntelliJ IDEA pêvekek çêkiriye ku nivîsên cihêreng (şirov û belgekirin, rêzikên biwêj di kodê de, metna ku bi Markdown an nîşankirina XML hatî formatkirin) ji bo rastbûna rêzimanî, rastnivîsîn û şêwazê kontrol dike (bi Îngilîzî jê re rastnivîsîn tê gotin).

Fikra projeyê ev bû ku meriv rastnivîsîna standard IntelliJ IDEA berbi pîvana Grammarly-ê ve bibe, da ku celebek Grammarly di hundurê IDE de çêbike.

Hûn dikarin bibînin ka çi bûye link.

Welê, li jêr em ê bi hûrgulî li ser kapasîteyên pêvekê, û hem jî dijwariyên ku di dema afirandina wê de derketine biaxivin.

Motivation

Gelek hilber hene ku ji bo nivîsandina nivîsê bi zimanên xwezayî hatine çêkirin, lê belge û şîroveyên kodê bi gelemperî di hawîrdorên pêşkeftinê de têne nivîsandin. Di heman demê de, IDE ji bo dîtina xeletiyên di kodê de karekî hêja dikin, lê ji bo nivîsarên bi zimanên xwezayî nebaş in. Ev yek pir hêsan dike ku meriv di rêziman, xalbendî, an şêwazê de xeletiyan bike bêyî ku hawîrdora pêşkeftinê wan destnîşan bike. Pir krîtîk e ku meriv di nivîsandina navgîniya bikarhêner de xeletiyek bike, ji ber ku ev ê bandorê ne tenê li têgihîştina kodê, lê di heman demê de bikarhênerên serîlêdana pêşkeftî bixwe jî bike.

Yek ji hawîrdorên pêşkeftinê yên herî populer û pêşkeftî IntelliJ IDEA ye, û her weha IDE-yên ku li ser Platforma IntelliJ-ê têne bingeh kirin. Platforma IntelliJ berê xwedan rastnivîskek çêkirî ye, lê ew ji xeletiyên rêzimanî yên herî hêsan jî xilas nabe. Me biryar da ku yek ji pergalên analîzkirina zimanê xwezayî yên populer di IntelliJ IDEA de yek bikin.

Реализация

Hackathon DevDays'19 (beş 2): parsera peyama dengî ji bo kontrolkirina Telegram û rêzimanê di IntelliJ IDEA deMe ji xwe re peywira afirandina pergala xweya verastkirina nivîsê negirt, ji ber vê yekê me çareseriyek heyî bikar anî. Vebijarka herî maqûl derket holê Amûra Ziman. Lîsans destûr da me ku em bi azadî ji bo mebestên xwe bikar bînin: ew belaş e, bi Java-yê hatî nivîsandin û çavkaniya vekirî ye. Wekî din, ew 25 zimanan piştgirî dike û ji panzdeh salan zêdetir e ku di pêşkeftinê de ye. Tevî vebûna wê, LanguageTool hevrikek ciddî ye ji bo çareseriyên verastkirina nivîsê ya drav, û rastiya ku ew dikare herêmî bixebite bi rastî taybetmendiya wê ya kujer e.

Koda pêvekê tê de ye depoyên li ser GitHub. Tevahiya proje li Kotlin-ê bi pêvekek piçûk a Java-yê ji bo UI-yê hate nivîsandin. Di dema hackathonê de, me karî piştgirîya Markdown, JavaDoc, HTML û Plain Text bicîh bînin. Piştî hackathonê, nûvekirinek mezin piştgirî ji bo XML, rêzikên rêzikên li Java, Kotlin û Python, û kontrolkirina rastnivîsê zêde kir.

Zehmetiyên

Pir zû me fêhm kir ku ger em her carê hemî nivîsê ji bo vekolînê bidin LanguageTool, wê hingê pêveka IDEA dê li ser nivîsek kêm-zêde giran bicemidîne, ji ber ku vekolîn bixwe herikîna UI-yê asteng dike. Pirsgirêk bi kontrolkirina `ProgressManager.checkCancelled` hate çareser kirin - ev fonksiyon îstîsnayek derdixe ger IDEA bawer bike ku wextê betalkirina vekolînê ye.

Vê yekê bi tevahî cemidandin ji holê rakir, lê ne gengaz e ku meriv bikar bîne: pêvajoyek nivîsê demek pir dirêj digire. Digel vê yekê, di doza me de, pir caran beşek pir piçûk a nivîsê diguhezîne û em dixwazin bi rengekî encaman cache bikin. Tiştê ku me kir tam ev e. Ji bo ku em her carê her tiştî kontrol nekin, me bi biryardarî nivîsê perçe perçe kir û tenê yên ku hatine guhertin kontrol kirin. Ji ber ku metn dikarin mezin bin û me nexwest ku cache bar bikin, me ne nivîsan bixwe, lê haşeyên wan hilanîn. Vê yekê hişt ku pêvek bi hêsanî li ser pelên mezin jî bixebite.

LanguageTool ji 25 zimanan zêdetir piştgirî dike, lê ne mimkûn e ku bikarhênerek hewceyê wan hemîyan be. Min xwest ku li ser daxwazê ​​​​fersendê bidim dakêşandina pirtûkxaneyan ji bo zimanek taybetî (heke hûn wê di UI-yê de destnîşan bikin). Me jî ev yek pêk anî, lê derket holê ku ew pir tevlihev û ne pêbawer bû. Bi taybetî, me neçar ma ku LanguageTool bi komek nû ya zimanan bi karanîna dersek veqetandî bar bikin, û dûv re bi baldarî wê dest pê bikin. Di heman demê de, hemî pirtûkxane di depoyek bikarhêner .m2 de bûn, û di her destpêkê de me neçar ma ku yekparebûna wan kontrol bikin. Di dawiyê de, me biryar da ku heke bikarhêner bi mezinahiya pêvekê re pirsgirêk hebin, wê hingê em ê ji bo çend zimanên herî populer pêvekek cihê peyda bikin.

Piştî hackathon

Hackathon qediya, lê xebata li ser pêvekê bi tîmek teng re berdewam kir. Min xwest ku rêz, şîrove, û tewra avahîyên zimanî yên wekî navên guhêrbar û çînan piştgirî bikim. Heya nuha ev tenê ji bo Java, Kotlin û Python piştgirî ye, lê em hêvî dikin ku ev navnîş dê mezin bibe. Me gelek xeletiyên piçûk rast kir û bi rastnivîsa rastnivîsê ya çêkirî ya Idea re hevahengtir bûn. Wekî din, piştgiriya XML û kontrolkirina rastnivîsê xuya bû. Hemî ev dikare di guhertoya duyemîn de, ku me vê dawiyê weşandiye, were dîtin.

Çi ye?

Pêvekek wusa dikare ne tenê ji bo pêşdebiran, lê di heman demê de ji bo nivîskarên teknîkî jî bikêr be (pir caran, mînakî, bi XML-ê di IDE de dixebitin). Her roj neçar in ku bi zimanê xwezayî bixebitin, bêyî ku di forma serişteyên edîtorê de di derheqê xeletiyên gengaz de alîkarek hebe. Pêveka me îşaretên weha peyda dike û wê bi astek bilind a rastbûnê dike.
Em plan dikin ku pêvekê pêşve bibin, hem bi lêzêdekirina zimanên nû û hem jî bi vekolîna nêzîkatiyek gelemperî ya organîzekirina kontrolkirina nivîsê. Di plansaziyên me yên lezgîn de pêkanîna profîlên stîlîstîkî (komên qaîdeyên ku rêbernameyek şêwazê ji bo nivîsê diyar dikin, mînakî, "nimûne nenivîsin, lê forma tam binivîsin"), berfirehkirina ferhengê û başkirina navrûya bikarhêner (bi taybetî, Em dixwazin fersendê bidin bikarhêner ku ne tenê peyvek paşguh bike, lê zêde bike nav ferhengê, beşa axaftinê nîşan bide).

Çavkanî: www.habr.com

Add a comment