Gjithmonë kam menduar se një programues i lenë është një programues i mirë. Pse? Sepse nëse e kërkon një punëtor të ndershëm të bëjë diçka, ai do të shkojë dhe do ta bëjë. Ndërsa një programues i lenë do të shpenzojë 2-3 herë më shumë kohë, por do të shkruajë një skript që do ta bëjë atë për të. Ndoshta, hera e parë do të shpenzohet një kohë e tepruar, por me kushtin e detyrave të përsëritura, ky qasje shumë shpejt kthehet. Unë e konsideroj veten një programues të lenë. Kjo ishte një hyrje, tani le të kalojmë në punë.
Historia e parë
Disa vite më parë mendova se si mund ta përmirësoj anglishten time. Nuk kishte asgjë më të mirë se leximi i letërsisë që më erdhi në mendje. Bleva një lexues elektronik, shkarkova libra dhe fillova të lexoj. Gjatë leximit më shpesh takoheshin fjalë të panjohura. I përkthyesha ato menjëherë me ndihmën e fjalorëve të integruar në lexuesin, por vura re një veçori: fjalët nuk donin të mbeteshin në mendje. Kur pas disa faqeve takoja përsëri atë fjalë, me 90% mundësi përsëri kisha nevojë për përkthim, dhe kështu çdo herë. Shkonte në përfundimin se është e pamjaftueshme thjesht të përkthesh fjalë të panjohura gjatë leximit, duhet të bësh diçka tjetër. Një mundësi ideale do të ishte ta çoje atë në përdorim dhe të filloje ta përdorje, por unë nuk jetoj në një vend anglofon dhe kjo është shumë e pamundur. Këtu më erdhi në mendje se dikur kisha lexuar për .
Çfarë është kjo dhe si funksionon? Nëse themi shkurt, ekziston një e tillë , më pas një citat nga Wikipedia:
Që në orën e parë, deri në 60% e të gjitha informacionit të marrë harrohet, pas 10 orësh nga mësimi, në memorie mbetet 35% e asaj që është mësuar. Pastaj procesi i harresës ndodh ngadalë, dhe pas 6 ditësh në memorie mbetet rreth 20% e numrit total të sillave fillimisht të mësuara, po aq mbetet në memorie edhe pas një muaji.
Dhe përfundimi këtu
Përfundimet që mund të nxirren mbi këtë kurbë janë se për memorizim efektiv nevojitet ripërsëritja e materialit të mësuar.
Këtu kemi arritur në idenë .
kjo është një program i plotë falas me burim të hapur që implementon idenë e përsëritjes intervale. Thënë më thjesht, karta flash të kompjuterizuar, me një anë pyetja, dhe në anën tjetër përgjigjja. Duke qenë se mund të krijoni pyetje/përgjigje me anë të një html/css/javascript, mund të thuhet se ajo ka mundësi të vërteta të pakufizuara. Për më tepër, ajo është e zgjerueshme me , dhe një nga ato do t'i nevojitet shumë më vonë.
Krijimi manual i kartave është i gjatë, i lodhshëm, dhe ka një probabilitet të madh që pas një kohe ta lini mënjanë; kështu që në një moment, i bëra vetes pyetjen, a është e mundur ta automatizoj këtë proces. Përgjigjja është po, është e mundur. Dhe unë e bëra këtë. Të them të drejtën, kjo është më shumë , por që mund të përdoret. Nëse do të ketë interes nga përdoruesit dhe zhvillues të tjerë do të bashkohen, mund ta çojmë në një produkt të përfunduar, me të cilin mund të përdorin edhe përdoruesit teknikisht jo të edukuar. Aktualisht, përdorimi i utilitarit tim kërkon disa njohuri në programim.
Unë lexoj libra me anë të programit . Ai ka mundësinë e lidhjes së fjalorëve të jashtëm, dhe gjithashtu gjatë përkthimit të fjalëve, ruan fjalën për të cilën e thirret përkthimi në një skedar teksti. Tani mbetet vetëm të përkthehen këto fjalë dhe të krijohen kartat ANKI.
Fillimisht përpiqesha të përdorja për përkthim , etj. Por me shërbimet falas nuk arrita mbarë. Kufiri falas e shfrytëzoja që në procesin e zhvillimit; për më tepër, sipas kushteve të licencës, nuk kisha të drejtë të ruaja fjalët. Në një moment kuptova se duhej të përkthenja fjalët vetë. Si rezultat, u shkrua një modul të cilit mund t'i lidhesh dhe që di të konvertojë ato në HTML format.
Kështu duket artikulli i fjalorit në *.html, versioni im në krahasim me versionin

Para se të kërkoj një fjalë në fjalorët e lidhur, e përkthej në me anë të bibliotekës . Në fakt, për shkak të kësaj biblioteke fillova të shkruaj në Java dhe plani fillestar ishte ta shkruaja gjithçka në Java, por gjatë procesit gjeta bibliotekën nëpërmjet së cilës mund të ekzekutoni mjaft lehtë kodin Java nga nodejs dhe një pjesë e kodit është shkruar në JavaScript. Po të kisha gjetur këtë bibliotekë më parë, nuk do të kisha shkruar asnjë rresht në Java. Një projekt tjetër anësor që lindi gjatë procesit është krijimi i cili u gjend në internet në formatin *.chm, u konvertua dhe u riaftësua në një formë të arsyeshme. Nëse autori i skedarit origjinal me nofkën yozhic sheh këtë artikull, i falënderoj shumë për punën e bërë, pa dokumentacionin e tij ndoshta nuk do të kisha arritur asgjë.
Pra, kam një fjalë në anglisht, artikulli i saj në fjalor në formatin *.html, mbetet të bashkohen të gjitha, të krijohen artikuj ANKI nga lista e fjalëve dhe të futen në bazën e të dhënave ANKI. Për këtë qëllim është krijuar projekti i mëposhtëm . Ai di të marrë si input një listë fjalësh, të përkthejë, të krijojë artikuj ANKI *.html dhe ti regjistrojë ato në bazën e të dhënave ANKI. Në fund të artikullit ka një udhëzues se si ta përdorni. Deri tani është historia e dytë ku përsëritjet me intervale mund të jenë të dobishme.
Historia e dytë.
Të gjithë njerëzit në kërkim të një specializimi më shumë/jo më pak të kualifikuar përfshirë programuesit përballen me nevojën për t'u përgatitur për intervista. Shumë koncepte që kërkohen në intervista nuk i përdorni në praktikën e përditshme dhe ato harrohen. Gjatë një përgatitjeje për intervistë tjetër, duke shfletuar skicën, librin, manualin, u përballa me atë se është shumë e vështirë dhe merr shumë kohë dhe vëmendje për të ndarë informacionin që tashmë e dini, sepse ai nuk është gjithmonë i dukshëm dhe duhet të futesh në detaje për të kuptuar që ai është i paqartë. Kur ju afroheni një teme që vërtet duhet ta përsërisni, shumë herë ndodh që tashmë jeni lodhur dhe cilësia e përgatitjes dëmtohet. Në një moment mendoja, pse të mos përdorim kartat ANKI dhe për këtë? Për shembull, gjatë skicimit të një teme, menjëherë të krijoni një skicë në formën e një pyetje - përgjigje dhe pastaj gjatë përsëritjes do të dini menjëherë nëse e dini apo jo përgjigjen për këtë pyetje.
Problemi ndodhi vetëm në atë se ishte shumë e lodhshme dhe e mërzitshme të shkruaja pyetje. Për të lehtësuar procesin, në projekt unë shtova funksionalitetin për të konvertuar teksti në kartat ANKI. Çfarëdo që ju nevojitet, është të shkruani një skedar të madh, ku pyetjet dhe përgjigjet do të shënohen me një renditje simboresh të paracaktuara, me të cilat parseri do të kuptojë se ku është pyetja dhe ku është përgjigja.
Pasi të krijohet ky skedar, ju ekzekutoni data2anki dhe ai krijon kartat ANKI. Skedari origjinal është lehtësisht i redaktueshëm dhe mund të ndahen, mjafton të fshini kartën(e) përkatëse dhe të rindizni programin, dhe një version i ri do të krijohet.
Instalimi dhe përdorimi
Instalimi i ANKI + AnkiConnect
- Shkarkoni ANKI këtu:
- Instaloni plug-in-in AnkiConnect:
Instalimi
- Shkarkoni nga repozitorit github
git clone https://github.com/anatoly314/data2anki - Instaloni varësitë
cd data2anki && npm install - Shkarkoni varësitë java
- Shkarkoni jar-dependencies.zip dhe vendosni përmbajtjen e saj në data2anki/java/jars
- Shkarkoni nga repozitorit github
Përdorimi për përkthimin e fjalëve:
Në skedar data2anki/config.json:
në çelësin mode shkruani vlerën dsl2anki
në çelësin modules.dsl.anki.deckName dhe modules.dsl.anki.modelName shkruani, përkatësisht, dhe (duhen krijuar përpara krijimit të kartave). Aktualisht mbështetet vetëm modeli i tipit Basic:
Ka fushat Front dhe Back, dhe do të krijojë një kartë. Teksti që futni në Front do të shfaqet në pjesën e përparme të kartës, dhe teksti që futni në Back do të shfaqet në pjesën e pasme të kartës.
ku fjala origjinale është Front field, ndërsa përkthimi do të jetë në Back field.
Nuk ka asnjë problem të shtohet mbështetje Basic (and reversed card), ku për fjalën dhe përkthimin do të krijohet një kartë e kundërt, ku nga përkthimi duhet të kujtoni fjalën origjinale. Kërkohet vetëm kohë dhe dëshirë.
në çelësin modules.dsl.dictionariesPath shkruani një array me fjalorët e lidhur *.dsl Çdo fjalor i lidhur është një direktor që përmban skedarët e fjalorit sipas formatit:
në çelësin modules.dsl.wordToTranslatePath shkruani rrugën për listën e fjalëve që dëshironi të përktheni.
- Ekzekutoni me aplikacionin ANKI të punës
node data2ankiindex.js - PROFIT!!!
Përdorimi për krijimin e kartave nga markdown
Në skedar data2anki/config.json:
- në çelësin mode shkruani vlerën markdown2anki
- në çelësin modules.markdown.anki.deckName dhe modules.dsl.anki.modelName shkruani, përkatësisht, dhe (duhen krijuar përpara krijimit të kartave). Për markdown2anki mode mbështetet vetëm modeli i tipit Basic.
në çelësin modules.markdown.selectors.startQuestionSelectors dhe modules.markdown.selectors.startAnswerSelectors shkruani selektorët me të cilët shënojnë fillimin e pyetjes dhe përgjigjes përkatësisht. Rreshti i vetë selektorit nuk do të shënohet dhe nuk do të përfshihet në kartë, parseri do të fillojë punën nga rreshti tjetër.
Për shembull, kjo kartë pyetje/përgjigje:

Do të duket në markdown në këtë mënyrë:
#QUESTION# ## Question 5. Write a mul function which will work properly when invoked with following syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Below is the code followed by the explanation of how it works: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonymous function return x * y * z; }; }; } ``` Here the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function. - A function is an instance of the Object type - A function can have properties and has a link back to its constructor method - A function can be stored as variable - A function can be pass as a parameter to another function - A function can be returned from another functionShembulli është marrë nga këtu:
Ka gjithashtu një skedar me shembuj në dosjen e projektit
shembuj/markdown2anki-shembulli.md- në çelësin modules.markdown.pathToFile
përcaktoni, rrugën te skedari ku ndodhet *.md skedari me pyetje/ përgjigje
- Ekzekutoni me aplikacionin ANKI të punës
node data2ankiindex.js - PROFIT!!!
Kështu duket në telefonin mobil:

Rezultati
Kartelat ANKI të marra në versionin desktop sinkronizohen pa probleme me ANKI cloud (falas deri në 100mb), pastaj mund të përdoren kudo. Ka klientë për Android dhe iPhone, gjithashtu mund të përdoret edhe në shfletues. Në përfundim, nëse keni kohë që nuk dini si ta shpenzoni, në vend që të skroni pa qëllim në Facebook ose katërkotë në Instagram, mund të mësoni diçka të re.
Epilogu
Siç e përmenda më parë, kjo është më shumë një POC punues, që mund të përdoret, sesa një produkt i përfunduar. Diku rreth 30% e standardit të parser DSL nuk është implementuar, dhe për këtë arsye, , gjithashtu ka ide për ta shkruar përsëri në JavaScript, sepse duhen 'koherencë', dhe për më tepër, tani është shkruar jo shumë optimalisht. Tani parseri ndan një pemë, gjë që mendoj se është e panevojshme dhe e komplikon kodin. Në markdown2anki qartësi të imazheve nuk parseנען. Do të mundohem ta zhvilloj gradualisht, por, për sa kohë që po shkruaj për vete, do të zgjidh fillimisht ato pengesa që do të godas, por nëse dikush dëshiron të ndihmojë, është i mirëpritur. Nëse ka pyetje në lidhje me programin, do të jem i lumtur të ndihmoj përmes çështjeve të hapura në projektet përkatëse. Kritikën dhe propozimet e tjera dërgojini këtu. Shpresoj se ky projekt do të jetë i dobishëm për dikë.
P.S. Nëse keni vënë re gabime (dhe fatkeqësisht, ka), shkruani në privat, do t'i korrigjoj të gjitha.
Burimi: habr.com

