Dvije priče o tome kako vam ANKI može pomoći da naučite strani jezik i pripremite se za intervju

Uvek sam verovao da je lenji programer dobar programer. Zašto? Jer zamolite marljivog radnika da uradi nešto, on će otići i uraditi to. A lijeni programer će potrošiti 2-3 puta više vremena, ali će napisati skriptu koja će to učiniti umjesto njega. Može potrajati nerazumno dugo da se ovo uradi prvi put, ali s ponovljenim zadacima ovaj pristup će se vrlo brzo isplatiti. Smatram se lijenim programerom. To je bila preambula, a sada pređimo na posao.

Prva priča

Prije nekoliko godina pitao sam se kako da poboljšam svoj engleski. Ništa bolje mi nije palo na pamet od čitanja literature. Kupio sam elektronski čitač, skinuo knjige i počeo sam da čitam. Čitajući, stalno sam nailazio na nepoznate riječi. Odmah sam ih preveo koristeći rječnike ugrađene u čitač, ali sam primijetio jednu osobinu: riječi nisu htjele da se pamte. Kada sam nekoliko stranica kasnije ponovo naišao na ovu riječ, sa vjerovatnoćom od 90% ponovo mi je trebao prijevod, a to se dešavalo svaki put. Zaključak je bio da nije dovoljno samo prevoditi nepoznate riječi dok čitate, već morate raditi nešto drugo. Idealna opcija bi bila da ga uvedem u svakodnevni život i počnem da ga koristim, ali ja ne živim u zemlji engleskog govornog područja i to je malo verovatno. Onda sam se sjetio da sam jednom čitao Spaced Repetition.

Šta je to i sa čime se jede? Ukratko, postoji ovo krivulja zaborava, dalje citat sa Wikipedije:

Već u toku prvog sata zaboravlja se do 60% svih primljenih informacija; 10 sati nakon pamćenja, 35% naučenog ostaje u pamćenju. Zatim proces zaboravljanja teče polako i nakon 6 dana u pamćenju ostaje oko 20% od ukupnog broja inicijalno naučenih slogova, a isto toliko ostaje u pamćenju nakon mjesec dana.

I zaključak odavde

Zaključci koji se mogu izvesti na osnovu ove krive su da je za efikasno pamćenje potrebno ponavljati naučeno gradivo.

Pa smo došli na ideju razmaknuto ponavljanje.

ANKI je potpuno besplatan program otvorenog koda koji implementira ideju razmaknutog ponavljanja. Jednostavno rečeno, kompjuterizovane fleš kartice imaju pitanje na jednoj strani i odgovor na drugoj. Pošto možete postavljati pitanja/odgovore koristeći obične html/css/javascript, onda možemo reći da ima zaista neograničene mogućnosti. Osim toga, proširiv je posebnim dodaci, a jedan od njih će nam biti od velike koristi u budućnosti.

Ručno kreiranje kartica je dugo, zamorno i sa velikom vjerovatnoćom ćete nakon nekog vremena zaboraviti na ovaj zadatak, pa sam se u jednom trenutku zapitao da li je moguće automatizirati ovaj zadatak. Odgovor je da, možete. I uradio sam to. Odmah ću reći, to je više POC (dokaz koncepta), ali koji se može koristiti. Ako postoji interes korisnika i uključe se drugi programeri, onda se može dovesti do gotovog proizvoda koji čak i tehnički nepismeni korisnici mogu koristiti. Sada, korištenje mog uslužnog programa zahtijeva određeno znanje o programiranju.

Čitam knjige koristeći program AI Reader. Ima mogućnost povezivanja eksternih rječnika, a kada prevedete riječ, sprema riječ koju ste pozvali za prijevod u tekstualnu datoteku. Ostaje samo prevesti ove riječi i kreirati ANKI kartice.

U početku sam pokušao da koristim za prevod google Prevodilac, Lingvo API itd. Ali stvari nisu išle s besplatnim uslugama. Iscrpio sam slobodan limit tokom procesa razvoja, osim toga, prema uslovima licence, nisam imao pravo keširanja riječi. U jednom trenutku sam shvatio da moram sam prevesti riječi. Kao rezultat, napisan je modul dsl2html na koju se možete povezati DSL rječnici i ko zna kako ih pretvoriti HTML formatu.

Ovako izgleda unos u rječniku u *.html, moja opcija u odnosu na opciju GoldenDict

Dvije priče o tome kako vam ANKI može pomoći da naučite strani jezik i pripremite se za intervju

Prije nego što potražim riječ u povezanim rječnicima, dovedem je do oblik rječnika (lema) koristeći biblioteku Stanford CoreNLP. Zapravo, zbog ove biblioteke sam počeo da pišem na Javi i prvobitni plan je bio da sve napišem na Javi, ali sam u procesu pronašao biblioteku čvor-java sa kojim možete relativno lako izvršiti Java kod iz nodejs-a, a dio koda je napisan u JavaScript-u. Da sam pronašao ovu biblioteku ranije, ni jedan red ne bi bio napisan u Javi. Još jedan sporedni projekat koji je rođen u tom procesu je stvaranje spremište sa DSL dokumentacijom koji je pronađen na mreži u formatu *.chm, pretvoren i doveden u božanski oblik. Ako je autor originalnog fajla korisnik po nadimku yozhic Kada vidi ovaj članak, mnogo mu se zahvaljujem na poslu koji je uradio; bez njegove dokumentacije najvjerovatnije ne bih uspio.

Dakle, imam riječ na engleskom, njen unos u rječniku u formatu *.html, preostaje samo sastaviti sve, kreirati ANKI članke iz liste riječi i unijeti ih u ANKI bazu podataka. U tu svrhu kreiran je sljedeći projekat data2anki. Može uzeti listu riječi kao unos, prevesti, kreirati ANKI *.html članke i evidentirati ih u ANKI bazi podataka. Na kraju članka nalaze se upute kako ga koristiti. U međuvremenu, druga priča je u kojoj razmaknuta ponavljanja mogu biti korisna.

Druga priča.

Svi ljudi koji traže više/manje kvalifikovanu specijalnost, uključujući programere, suočeni su sa potrebom pripreme za intervju. Mnoge od pojmova koji se pitaju u intervjuima ne koristite u svakodnevnoj praksi i oni se zaboravljaju. Pripremajući se za intervju, prelistavajući bilješke, knjigu, priručnik, suočio sam se s činjenicom da je potrebno puno vremena i pažnje da se procijedi informacije koje već znate jer nisu uvijek očigledne i morate pažljivo pročitajte da shvatite o čemu se radi. irelevantno. Kada dođete do teme koju zaista treba ponoviti, često se desi da ste već umorni i da pati kvalitet vaše pripreme. U nekom trenutku sam pomislio, zašto ne koristiti ANKI kartice i za ovo? Na primjer, kada pravite bilješke o nekoj temi, odmah napravite bilješku u obliku pitanja i odgovora, a onda kada je ponovite, odmah ćete znati znate li odgovor na ovo pitanje ili ne.

Jedini problem koji se pojavio je taj što je kucanje pitanja bilo jako dugo i zamorno. Da bi proces bio lakši, data2anki projekat Dodao sam funkciju konverzije markdown tekst na ANKI karticama. Sve što trebate je da napišete jednu veliku datoteku u kojoj će pitanja i odgovori biti označeni unaprijed određenim nizom znakova, po kojima će parser razumjeti gdje je pitanje, a gdje odgovor.

Kada se ovaj fajl kreira, pokrećete data2anki i on kreira ANKI kartice. Originalnu datoteku je lako uređivati ​​i dijeliti, samo trebate izbrisati odgovarajuću karticu(e) i ponovo pokrenuti program, a nova verzija će biti kreirana.

Instalacija i korištenje

  1. Instaliranje ANKI + AnkiConnect

    1. Preuzmite ANKI ovdje: https://apps.ankiweb.net/
    2. Instalirajte dodatak AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. postavljanje data2anki

    1. Skinuti data2anki iz github repozitorija
      git clone https://github.com/anatoly314/data2anki
    2. Instalirajte zavisnosti
      cd data2anki && npm install
    3. Preuzmite java zavisnosti https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Raspakivanje jar-dependencies.zip i stavite njen sadržaj data2anki/java/jars

  3. Koristite za prevođenje riječi:

    1. U fajlu data2anki/config.json:

      • u ključu način unesite vrijednost dsl2anki

      • u ključu modules.dsl.anki.deckName и modules.dsl.anki.modelName pisati u skladu sa tim Deck Name и Naziv modela (mora biti kreiran prije kreiranja kartica). Trenutno je podržan samo tip modela osnovni:

        Ima prednje i zadnje polje i kreiraće jednu karticu. Tekst koji unesete ispred će se pojaviti na prednjoj strani kartice, a tekst koji unesete na poleđini će se pojaviti na poleđini kartice.

        gdje je originalna riječ? Prednje polje, a prijevod će biti u Zadnje polje.

        Nema problema sa dodavanjem podrške Osnovna (i obrnuta kartica), gdje će se kreirati obrnuta kartica za riječ i prijevod, gdje ćete na osnovu prijevoda morati zapamtiti originalnu riječ. Sve što trebate je vrijeme i želja.

      • u ključu modules.dsl.dictionariesPath registrirajte niz sa povezanim *.dsl rječnici. Svaki povezani rječnik je direktorij u kojem se nalaze datoteke rječnika u skladu s formatom: Struktura DSL rječnika

      • u ključu modules.dsl.wordToTranslatePath unesite putanju do liste riječi koje želite prevesti.

    2. Pokrenite sa pokrenutom ANKI aplikacijom
      node data2ankiindex.js
    3. PROFIT!!!

  4. Koristi se za kreiranje kartica od mardowna

    1. U fajlu data2anki/config.json:

      • u ključu način unesite vrijednost markdown2anki
      • u ključu modules.markdown.anki.deckName и modules.dsl.anki.modelName pisati u skladu sa tim Deck Name и Naziv modela (mora biti kreiran prije kreiranja kartica). Za markdown2anki Podržan je samo tip modela osnovni.
      • u ključu modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors pišete selektore kojima označavate početak pitanja, odnosno odgovor. Sam red sa selektorom neće biti raščlanjen i neće završiti na kartici; parser će početi da radi od sledećeg reda.

        Na primjer, ova kartica pitanja/odgovora:

        Dvije priče o tome kako vam ANKI može pomoći da naučite strani jezik i pripremite se za intervju

        U markdownu će izgledati ovako:
        #PITANJE# ## Pitanje 5. Napišite mul funkciju koja će ispravno raditi kada se pozove sa sljedećom sintaksom. ```javascript console.log(mul(2)(3)(4)); // izlaz: 24 console.log(mul(4)(3)(4)); // izlaz : 48 ``` #ODGOVOR# Ispod je kod praćen objašnjenjem kako radi: ```javascript function mul (x) { return function (y) { // anonimna funkcija return function (z) { // anonimna funkcija return x * y * z; }; }; } ``` Ovdje funkcija `mul` prihvaća prvi argument i vraća anonimnu funkciju koja uzima drugi parametar i vraća anonimnu funkciju koja uzima treći parametar i vraća množenje argumenata koji se prosljeđuju uzastopno u definiranoj u Javascript funkciji unutra ima pristup vanjskoj funkcijskoj varijabli, a funkcija je objekt prve klase tako da je može vratiti i funkcija i proslijediti kao argument u drugoj funkciji. - Funkcija je instanca tipa Object - Funkcija može imati svojstva i ima vezu natrag na njen metod konstruktora - Funkcija se može pohraniti kao varijabla - Funkcija se može proslijediti kao parametar drugoj funkciji - Funkcija se može vraćen iz druge funkcije
        

        Primjer preuzet odavde: 123-JavaScript-Intervju-Pitanja

        U fascikli projekta postoji i datoteka s primjerima examples/markdown2anki-example.md

      • u ključu modules.markdown.pathToFile
        zapišite putanju do datoteke gdje je *.md fajl pitanja/odgovora

    2. Pokrenite sa pokrenutom ANKI aplikacijom
      node data2ankiindex.js
    3. PROFIT!!!

Ovako to izgleda na mobilnom telefonu:

rezultat

Kartice primljene na desktop verziji ANKI-ja se bez problema sinhronizuju sa ANKI oblakom (besplatno do 100mb), a zatim ih možete koristiti svuda. Postoje klijenti za Android i iPhone, a možete ga koristiti i u pretraživaču. Kao rezultat toga, ako imate vremena na koje nemate na šta potrošiti, onda umjesto besciljnog listanja po Facebooku ili mačkama na Instagramu, možete naučiti nešto novo.

Epilog

Kao što sam spomenuo, ovo je više radni POC koji možete koristiti nego gotov proizvod. Oko 30% standarda DSL parsera nije implementirano, te stoga, na primjer, ne mogu se pronaći svi unosi u rječniku koji se nalaze u rječnicima, postoji i ideja da se to prepiše JavaScript, jer želim „dosljednost“, a osim toga, sada nije napisano baš optimalno. Sada parser gradi stablo, ali po mom mišljenju to je nepotrebno i ne treba komplicirati kod. IN markdown2anki modu, slike se ne analiziraju. Pokušaću malo po malo da skrećem, ali pošto pišem za sebe, pre svega ću rešavati probleme na koje ću i sam stati, ali ako neko želi da pomogne, onda je dobrodošao. Ako imate pitanja o programu, rado ću pomoći u rješavanju otvorenih pitanja u relevantnim projektima. Ostale kritike i sugestije pišite ovdje. Nadam se da će ovaj projekat nekome biti od koristi.

PS Ako primijetite neku grešku (a, nažalost, ima ih), pišite mi u ličnu poruku, sve ću ispraviti.

izvor: www.habr.com

Dodajte komentar