Twa ferhalen oer hoe't ANKI jo kin helpe om in frjemde taal te learen en tariede op ynterviews

Ik leaude altyd dat in luie programmeur in goede programmeur is. Wêrom? Want freegje in hurde wurker om wat te dwaan, hy sil gean en dwaan. En in luie programmeur sil 2-3 kear mear tiid besteegje, mar sil in skript skriuwe dat it foar him sil dwaan. It kin in ûnferstannich lange tiid duorje om dit de earste kear te dwaan, mar mei werhelle taken sil dizze oanpak tige fluch betelje. Ik beskôgje mysels in luie programmeur. Dat wie de preambule, lit ús no oan de slach.

Earste ferhaal

In pear jier lyn frege ik my ôf hoe’t ik myn Ingelsk ferbetterje koe. Der kaam neat betters yn 't sin as it lêzen fan literatuer. Ik kocht in elektroanyske lêzer, downloadde boeken en begon te lêzen. By it lêzen kaam ik hieltyd ûnbekende wurden tsjin. Ik haw se daliks oerset mei de yn de lêzer ynboude wurdboeken, mar ik fernaam ien eigenskip: de wurden woenen net ûnthâlden wurde. Doe't ik dit wurd in pear siden letter wer tsjinkaam, hie ik mei 90% kâns op 'e nij oerset nedich, en dat barde elke kear. De konklúzje wie dat it net genôch wie om by it lêzen gewoan ûnbekende wurden oer te setten, jo moatte wat oars dwaan. De ideale opsje soe wêze om it yn it deistich libben yn te fieren en it te brûken, mar ik wenje net yn in Ingelsktalig lân en dit is net wierskynlik. Doe herinnerde ik my dat ik ienris oer lies Spaced werhelling.

Wat is it en wêr wurdt it mei iten? Koartsein, dit is der ferjitte kromme, fierdere sitaat fan Wikipedia:

Al binnen it earste oere is oant 60% fan alle ûntfongen ynformaasje fergetten; 10 oeren nei memorisaasje bliuwt 35% fan wat leard is yn it ûnthâld. Dan giet it proses fan ferjitten stadichoan troch, en nei 6 dagen bliuwt sa'n 20% fan it totale oantal earst learde wurdlidden yn it ûnthâld, en itselde bedrach bliuwt yn it ûnthâld nei in moanne.

En de konklúzje fan hjir

De konklúzjes dy't kinne wurde lutsen op basis fan dizze kromme binne dat foar effektive memorisaasje it nedich is om it memorisearre materiaal te werheljen.

Sa kamen wy op in idee spaced werhelling.

ANKI is in folslein fergees en iepen boarne programma dat it idee fan spaasjes werhelling ymplemintearret. Simply sette, kompjûterisearre flashkaarten hawwe in fraach oan 'e iene kant en in antwurd oan' e oare. Sûnt jo kinne dwaan fragen / antwurden mei help fan reguliere html/css/javascript, то можно сказать, что она обладает поистине безграничными возможностями. Кроме того, она расширяема специальными plugins, en ien fan harren sil wêze hiel brûkber foar ús yn 'e takomst.

Kaarten mei de hân meitsje is lang, ferfeelsum, en mei in hege kâns, nei in skoft sille jo dizze taak ferjitte, en dus op in stuit frege ik mysels de fraach, is it mooglik om dizze taak te automatisearjen. It antwurd is ja, jo kinne. En ik die it. Ik sil daliks sizze, it is mear POC (Proof of Concept), mar dy't brûkt wurde kin. As d'r belangstelling is fan brûkers en oare ûntwikkelders wurde belutsen, dan kin it brocht wurde ta in klear produkt dat sels technysk analfabeet brûkers kinne brûke. No, it brûken fan myn nut fereasket wat kennis fan programmearring.

Ik lês boeken mei it programma AI Reader. It hat de mooglikheid om eksterne wurdboeken te ferbinen, en as jo in wurd oersette, bewarret it it wurd dat jo hawwe roppen foar oersetting nei in teksttriem. Alles wat oerbliuwt is dizze wurden oer te setten en ANKI-kaarten te meitsjen.

Earst besocht ik te brûken foar oersetting Google-oersetter, Lingvo API ensfh. Mar dingen wurken net út mei fergese tsjinsten. Ik haw de frije limyt útput tidens it ûntwikkelingsproses, boppedat hie ik neffens de betingsten fan 'e lisinsje net it rjocht om wurden te cache. Op in stuit besefte ik dat ik de wurden sels oersette moast. Dêrtroch is in module skreaun dsl2html wêrmei jo ferbine kinne DSL wurdboeken en wa wit hoe te bekearen se yn HTML formaat.

Dit is hoe't in wurdboekyngong derút sjocht yn *.html, myn opsje yn ferliking mei de opsje GoldenDict

Twa ferhalen oer hoe't ANKI jo kin helpe om in frjemde taal te learen en tariede op ynterviews

Foardat ik in wurd sykje yn ferbûne wurdboeken, bring ik it nei wurdboekfoarm (lemma) mei help fan de biblioteek Stanford CoreNLP. На самом деле из-за этой библиотеки я и начал писать на Java и первоначальный план был написать все на Java, но в процессе я нашел библиотеку node-java wêrmei jo relatyf maklik Java-koade kinne útfiere fan nodejs en guon fan 'e koade is skreaun yn JavaScript. As ik dizze bibleteek earder fûn hie, soe net ien rigel yn Java skreaun wêze. In oar byprojekt dat yn it proses berne is is de skepping repository mei DSL dokumintaasje dat waard fûn op it netwurk yn it formaat *.chm, bekeard en yn godlike foarm brocht. As de skriuwer fan it orizjinele bestân in brûker is mei bynamme yozhic As hy dit artikel sjocht, tankje ik him tige foar it wurk dat hy dien hat; sûnder syn dokumintaasje soe ik nei alle gedachten net slagge.

Dat, ik haw in wurd yn it Ingelsk, syn wurdboekyngong yn it formaat *.html, осталось свести все воедино, создать ANKI статьи из списка слов и внести их в базу данных ANKI. Для этой цели был создан следующий проект gegevens2 oan. It kin in list mei wurden nimme as ynfier, oersette, meitsje ANKI *.html artikels en registrearje se yn 'e ANKI-database. Oan 'e ein fan it artikel binne d'r ynstruksjes oer hoe't jo it brûke. Yn 'e tuskentiid is it twadde ferhaal wêr't ferdielde werhellingen nuttich kinne wêze.

It twadde ferhaal.

Alle minsken op syk nei in mear/minder kwalifisearre spesjaliteit, ynklusyf programmeurs, wurde konfrontearre mei de needsaak om ta te rieden op in ynterview. In protte fan 'e begripen dy't wurde frege yn ynterviews brûke jo net yn' e deistige praktyk en se wurde fergetten. By it tarieden fan in fraachpetear, it trochblêdzjen fan oantekeningen, in boek, in naslagboek, krige ik te krijen mei it feit dat it in protte tiid en oandacht kostet om ynformaasje út te sifjen dy't jo al witte, om't it net altyd dúdlik is en jo moatte lês it foarsichtich om te begripen wat it is. irrelevant. As jo ​​by in ûnderwerp komme dat echt werhelle wurde moat, komt it faaks foar dat jo al wurch binne en de kwaliteit fan jo tarieding te lijen hat. Op in stuit tocht ik, wêrom net ek ANKI-kaarten brûke foar dit? Bygelyks, by it meitsjen fan oantekeningen oer in ûnderwerp, meitsje fuortendaliks in notysje yn 'e foarm fan in fraach en antwurd, en as jo it werhelje, sille jo fuortendaliks witte oft jo it antwurd op dizze fraach kenne of net.

Проблема возникла только в том, что набивать вопросы очень долго и нудно. Чтобы облегчить процесс, в gegevens2 oan projekt ik tafoege convert funksjonaliteit markdown tekst yn ANKI kaarten. Alles wat jo nedich hawwe is ien grut bestân te skriuwen wêryn fragen en antwurden wurde markearre mei in foarbepaalde folchoarder fan tekens, wêrmei't de parser sil begripe wêr't de fraach is en wêr't it antwurd is.

Sadree't dit bestân is oanmakke, rinne jo data2anki en it makket ANKI-kaarten. It orizjinele bestân is maklik om te bewurkjen en te dielen, jo moatte gewoan de korrespondearjende kaart(en) wiskje en it programma opnij útfiere, en in nije ferzje sil oanmakke wurde.

Ynstallaasje en gebrûk

  1. ANKI + AnkiConnect ynstallearje

    1. Download ANKI hjirwei: https://apps.ankiweb.net/
    2. Ynstallearje AnkiConnect plugin: https://ankiweb.net/shared/info/2055492159

  2. ynstelling gegevens2 oan

    1. Download gegevens2 oan fan github repository
      git clone https://github.com/anatoly314/data2anki
    2. Ynstallearje ôfhinklikens
      cd data2anki && npm install
    3. Download java-ôfhinklikens https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Utpakke jar-dependencies.zip en pleats syn ynhâld yn data2anki/java/jars

  3. Brûk om wurden oer te setten:

    1. Yn triem data2anki/config.json:

      • yn de kaai wize fier de wearde yn dsl2 oan

      • yn de kaai modules.dsl.anki.deckName и modules.dsl.anki.modelName skriuw neffens Deck Namme и model Namme (moat al oanmakke wurde foardat jo kaarten meitsje). Op it stuit wurdt allinich it modeltype stipe Basic:

        Has Front and Back fields, and will create one card. Text you enter in Front will appear on the front of the card, and text you enter in Back will appear on the back of the card.

        wêr is it oarspronklike wurd? Front fjild, en de oersetting sil wêze yn Efterfjild.

        D'r is gjin probleem om stipe ta te foegjen Basis (en omkearde kaart), где на слово и перевод будет создаваться и обратная карточка, где по переводу нужно будет вспомнить оригинальное слово. Нужно только наличие времени и желания.

      • yn de kaai modules.dsl.dictionariesPath registrearje in array mei ferbûn *.dsl словарями. Каждый подключенный словарь это директория в которой находятся файлы словаря в соответствии с форматом: DSL wurdboek struktuer

      • yn de kaai modules.dsl.wordToTranslatePath Fier it paad yn nei de list mei wurden dy't jo oersette wolle.

    2. Starte mei de ANKI-applikaasje dy't rint
      node data2ankiindex.js
    3. WINST!!!

  4. Brûkt foar it meitsjen fan kaarten út markdown

    1. Yn triem data2anki/config.json:

      • yn de kaai wize fier de wearde yn markdown2anki
      • yn de kaai modules.markdown.anki.deckName и modules.dsl.anki.modelName skriuw neffens Deck Namme и model Namme (moat al oanmakke wurde foardat jo kaarten meitsje). Foar markdown2anki modus allinnich model type wurdt stipe Basic.
      • yn de kaai modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors jo skriuwe seleksjes wêrmei jo it begjin fan 'e fraach en antwurd respektivelik markearje. De line mei de selector sels sil net wurde parseard en sil net op 'e kaart einigje; de ​​parser sil begjinne te wurkjen fanôf de folgjende rigel.

        Bygelyks dizze fraach/antwurdkaart:

        Twa ferhalen oer hoe't ANKI jo kin helpe om in frjemde taal te learen en tariede op ynterviews

        It sil der sa útsjen yn markdown:
        #QUESTION# ## Fraach 5. Skriuw in mul-funksje dy't goed wurket as se oproppen wurde mei de folgjende syntaksis. ```javascript console.log(mul(2)(3)(4)); // útfier: 24 console.log(mul(4)(3)(4)); // output: 48 ``` #ANSWER# Hjirûnder is de koade folge troch de útlis fan hoe't it wurket: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonime funksje jout x * y * z; }; }; } ``` Hjir akseptearret de `mul` funksje it earste argumint en jout de anonime funksje werom dy't de twadde parameter nimt en jout de anonime funksje werom dy't de tredde parameter nimt en de fermannichfâldigje fan arguminten werom jout dy't trochjûn wurdt yn opienfolgjende Javascript-funksje definieare binnen hat tagong ta eksterne funksje fariabele en funksje is de earste klasse foarwerp sadat it kin wurde weromjûn troch de funksje ek en trochjûn as argumint yn in oare funksje. - In funksje is in eksimplaar fan it Objekttype - In funksje kin eigenskippen hawwe en hat in keppeling werom nei syn konstruktormetoade - In funksje kin opslein wurde as fariabele - In funksje kin trochjûn wurde as in parameter nei in oare funksje - In funksje kin wêze werom fan in oare funksje
        

        Foarbyld nommen fan hjir: 123-JavaScript-ynterview-fragen

        D'r is ek in triem mei foarbylden yn 'e projektmap examples/markdown2anki-example.md

      • yn de kaai modules.markdown.pathToFile
        skriuw it paad op nei de triem wêr *.md fraach / antwurd triem

    2. Starte mei de ANKI-applikaasje dy't rint
      node data2ankiindex.js
    3. WINST!!!

Dit is hoe't it derút sjocht op in mobile tillefoan:

resultaat

Kaarten ûntfongen op 'e buroblêdferzje fan ANKI wurde sûnder problemen syngronisearre mei de ANKI-wolk (fergees oant 100mb), en dan kinne jo se oeral brûke. D'r binne kliïnten foar Android en iPhone, en jo kinne it ek brûke yn in blêder. As gefolch, as jo tiid hawwe dat jo neat hawwe om oan te besteegjen, dan kinne jo yn plak fan doelleas troch Facebook of katten op Instagram te rôljen, wat nijs leare.

Epilogue

Как я уже упоминал, это скорее рабочий POC, которым можно пользоваться, чем законченный продукт. Где-то процентов 30% стандарта DSL парсера не имплементировано, и поэтому, bygelyks, net alle wurdboek-yngongen dy't yn wurdboeken binne te finen, der is ek in idee om it yn te herskriuwen JavaSkript, так как хочется «consistency», а кроме того, сейчас он написан не очень оптимально. Сейчас парсер строит дерево, а это помоему лишнее и не нужно усложняет код. В markdown2anki modus, de bylden wurde net parsed. Ik sil besykje om stadichoan te besunigjen, mar om't ik foar mysels skriuw, sil ik earst de problemen oplosse dêr't ik sels op stappe sil, mar as immen helpe wol, dan binne jo wolkom. As jo ​​​​fragen hawwe oer it programma, sil ik graach helpe troch iepen problemen yn 'e oanbelangjende projekten. Skriuw hjir oare krityk en suggestjes. Ik hoopje dat dit projekt sil wêze nuttich foar immen.

PS As jo ​​​​flaters opmerke (en, spitigernôch, binne d'r guon), skriuw my dan yn in persoanlik berjocht, ik sil alles korrigearje.

Boarne: www.habr.com

Add a comment