Zawsze wierzyłem, że leniwy programista to dobry programista. Dlaczego? Ponieważ poproś ciężko pracującego, aby coś zrobił, a on to zrobi. A leniwy programista spędzi 2-3 razy więcej czasu, ale napisze skrypt, który zrobi to za niego. Wykonanie tej czynności za pierwszym razem może zająć nieuzasadnioną ilość czasu, ale przy powtarzających się zadaniach takie podejście zwróci się bardzo szybko. Uważam się za leniwego programistę. To był wstęp, teraz przejdźmy do rzeczy.
Historia pierwsza
Kilka lat temu zastanawiałem się, jak mógłbym poprawić swój angielski. Nic lepszego nie przychodziło mi do głowy niż czytanie literatury. Kupiłem czytnik elektroniczny, ściągnąłem książki i zacząłem czytać. Czytając, natykałam się na nieznane słowa. Od razu przetłumaczyłem je, korzystając ze słowników wbudowanych w czytnik, ale zauważyłem jedną cechę: słowa nie chciały zostać zapamiętane. Kiedy kilka stron później ponownie natknąłem się na to słowo, z 90% prawdopodobieństwem ponownie potrzebowałem tłumaczenia i działo się to za każdym razem. Wniosek był taki, że nie wystarczy po prostu przetłumaczyć nieznane słowa podczas czytania, trzeba zająć się czymś innym. Idealną opcją byłoby wprowadzenie go do codziennego życia i rozpoczęcie korzystania, jednak nie mieszkam w kraju anglojęzycznym i jest to mało prawdopodobne. Wtedy przypomniałem sobie, że kiedyś o tym czytałem .
Co to jest i z czym się je spożywa? Krótko mówiąc, jest coś takiego , dalszy cytat z Wikipedii:
Już w ciągu pierwszej godziny zapomina się aż 60% wszystkich otrzymanych informacji, a 10 godzin po zapamiętaniu 35% tego, czego się nauczyłeś, pozostaje w pamięci. Następnie proces zapominania przebiega powoli i po 6 dniach w pamięci pozostaje około 20% całkowitej liczby początkowo poznanych sylab, a ta sama ilość pozostaje w pamięci po miesiącu.
I stąd wniosek
Wnioski, jakie można wyciągnąć na podstawie tej krzywej, są takie, że dla efektywnego zapamiętywania konieczne jest powtarzanie zapamiętanego materiału.
Wpadliśmy więc na pomysł .
to całkowicie darmowy program typu open source, który realizuje ideę powtarzania w odstępach. Mówiąc najprościej, skomputeryzowane karty flash mają pytanie po jednej stronie i odpowiedź po drugiej. Ponieważ możesz zadawać pytania/odpowiedzi za pomocą zwykłego html/css/javascript, to można powiedzieć, że ma naprawdę nieograniczone możliwości. Ponadto można go rozszerzyć o specjalne , a jeden z nich będzie nam bardzo przydatny w przyszłości.
Ręczne tworzenie kartek jest długie, żmudne i z dużym prawdopodobieństwem po pewnym czasie zapomnisz o tym zadaniu, dlatego w pewnym momencie zadałem sobie pytanie, czy da się to zadanie zautomatyzować. Odpowiedź brzmi: tak, możesz. I zrobiłem to. Od razu powiem, że to coś więcej , ale które można wykorzystać. Jeśli użytkownicy zainteresują się projektem i zaangażują się w niego inni programiści, można je doprowadzić do gotowego produktu, z którego będą mogli korzystać nawet niepiśmienni technicznie użytkownicy. Teraz korzystanie z mojego narzędzia wymaga pewnej wiedzy z zakresu programowania.
Czytam książki za pomocą programu . Posiada możliwość podłączenia zewnętrznych słowników, a kiedy tłumaczysz słowo, zapisuje ono słowo, które wywołałeś do tłumaczenia, do pliku tekstowego. Pozostaje tylko przetłumaczyć te słowa i stworzyć karty ANKI.
Na początku próbowałem używać do tłumaczenia , itp. Ale w przypadku bezpłatnych usług coś nie wyszło. Wyczerpałem darmowy limit w procesie rozwoju, dodatkowo zgodnie z warunkami licencji nie miałem prawa buforować słów. W pewnym momencie zdałem sobie sprawę, że muszę sam przetłumaczyć te słowa. W efekcie powstał moduł z którym możesz się połączyć i kto wie, jak je przekształcić HTML forma.
Tak wygląda wpis słownikowy w *. Html, moja opcja w porównaniu z opcją

Zanim zacznę szukać słowa w podłączonych słownikach, przywołuję je korzystania z biblioteki . Tak naprawdę dzięki tej bibliotece zacząłem pisać w Javie i pierwotny plan zakładał pisanie wszystkiego w Javie, ale w trakcie znalazłem bibliotekę za pomocą którego można stosunkowo łatwo wykonać kod Java z nodejs, a część kodu jest napisana w JavaScript. Gdybym wcześniej znalazł tę bibliotekę, ani jedna linia nie zostałaby napisana w Javie. Kolejnym pobocznym projektem, który zrodził się w tym procesie, jest kreacja który został znaleziony w sieci w formacie *.chm, nawrócony i doprowadzony do boskiej postaci. Jeśli autorem oryginalnego pliku jest użytkownik o pseudonimie Yozhic Kiedy widzi ten artykuł, bardzo mu dziękuję za pracę, którą wykonał; bez jego dokumentacji najprawdopodobniej nie odniósłbym sukcesu.
Mam więc słowo w języku angielskim, jego wpis w słowniku w formacie *. Html, pozostaje tylko złożyć wszystko w jedną całość, utworzyć artykuły ANKI z listy słów i wprowadzić je do bazy danych ANKI. W tym celu powstał poniższy projekt . Może pobrać listę słów jako dane wejściowe, przetłumaczyć, utworzyć ANKI *. Html artykuły i zapisywać je w bazie danych ANKI. Na końcu artykułu znajduje się instrukcja jak z niego korzystać. W międzyczasie przydatne mogą być powtórzenia w drugiej historii.
Druga historia.
Wszystkie osoby poszukujące mniej/więcej wykwalifikowanej specjalizacji, w tym także programiści, stają przed koniecznością przygotowania się do rozmowy kwalifikacyjnej. Wiele pojęć zadawanych na rozmowach kwalifikacyjnych nie wykorzystuje się w codziennej praktyce i zostaje zapomnianych. Przygotowując się do rozmowy kwalifikacyjnej, przeglądając notatki, książkę, podręcznik, zetknąłem się z tym, że przesiewanie informacji, które już znasz, zajmuje dużo czasu i uwagi, bo nie zawsze jest to oczywiste i trzeba się przeczytaj uważnie, żeby zrozumieć, co to jest. Nieistotne. Kiedy dojdziesz do tematu, który naprawdę trzeba powtórzyć, często zdarza się, że jesteś już zmęczony i ucierpi jakość Twojego przygotowania. W pewnym momencie pomyślałem, dlaczego nie wykorzystać do tego również kart ANKI? Np. robiąc notatki na jakiś temat, od razu stwórz notatkę w formie pytania i odpowiedzi, a gdy ją powtórzysz, od razu będziesz wiedział, czy znasz odpowiedź na to pytanie, czy nie.
Jedynym problemem, jaki się pojawił, było to, że wpisywanie pytań było bardzo długie i żmudne. Aby ułatwić ten proces, projekt, do którego dodałem funkcję konwersji tekst na kartach ANKI. Wystarczy napisać jeden duży plik, w którym pytania i odpowiedzi zostaną oznaczone z góry ustaloną sekwencją znaków, dzięki czemu parser zrozumie, gdzie jest pytanie i gdzie jest odpowiedź.
Po utworzeniu tego pliku uruchamiasz data2anki i tworzysz karty ANKI. Oryginalny plik można łatwo edytować i udostępniać, wystarczy usunąć odpowiednie karty i ponownie uruchomić program, a zostanie utworzona nowa wersja.
Instalacja i użytkowanie
Instalowanie ANKI + AnkiConnect
- Pobierz ANKI stąd:
- Zainstaluj wtyczkę AnkiConnect:
Instalacja
- Ściąganie z repozytorium github
git clone https://github.com/anatoly314/data2anki - Zainstaluj zależności
cd data2anki && npm install - Pobierz zależności Java
- Rozpakowywanie jar-zależności.zip i umieść w nim jego zawartość data2anki/Java/jars
- Ściąganie z repozytorium github
Użyj do tłumaczenia słów:
W pliku data2anki/config.json:
w kluczu tryb wprowadź wartość dsl2anki
w kluczu Modules.dsl.anki.deckName и moduły.dsl.anki.nazwa modelu napisz odpowiednio и (należy już utworzyć przed utworzeniem kart). Obecnie obsługiwany jest tylko typ modelu Basic:
Ma pola Przód i Tył i utworzy jedną kartę. Tekst wpisany z przodu pojawi się na awersie karty, a tekst wpisany z tyłu pojawi się na odwrocie karty.
gdzie jest oryginalne słowo? Pole przednie, a tłumaczenie będzie dostępne Pole tylne.
Nie ma problemu z dodaniem wsparcia Podstawowy (i odwrócona karta), gdzie zostanie utworzona odwrotna karta dla słowa i tłumaczenia, gdzie na podstawie tłumaczenia będziesz musiał zapamiętać oryginalne słowo. Wszystko czego potrzebujesz to czas i chęci.
w kluczu moduły.dsl.dictionariesPath zarejestruj tablicę z podłączonym *.dsl słowniki. Każdy podłączony słownik jest katalogiem, w którym znajdują się pliki słownika zgodnie z formatem:
w kluczu moduły.dsl.wordToTranslatePath wprowadź ścieżkę do listy słów, które chcesz przetłumaczyć.
- Uruchom z uruchomioną aplikacją ANKI
node data2ankiindex.js - ZYSK!!!
Używa do tworzenia kart z przecen
W pliku data2anki/config.json:
- w kluczu tryb wprowadź wartość markdown2anki
- w kluczu moduły.markdown.anki.deckNazwa и moduły.dsl.anki.nazwa modelu napisz odpowiednio и (należy już utworzyć przed utworzeniem kart). Dla markdown2anki obsługiwany jest tylko typ modelu Basic.
w kluczu moduły.markdown.selectors.startQuestionSelectors и moduły.markdown.selectors.startAnswerSelectors piszesz selektory, za pomocą których zaznaczasz odpowiednio początek pytania i odpowiedzi. Linia z samym selektorem nie zostanie przeanalizowana i nie trafi na kartę; parser zacznie działać od następnej linii.
Na przykład ta karta pytań/odpowiedzi:

Będzie to wyglądać tak w przecenach:
#PYTANIE# ## Pytanie 5. Napisz funkcję mul, która będzie działać poprawnie po wywołaniu z następującą składnią. ```konsola JavaScript.log(mul(2)(3)(4)); // wyjście: 24 console.log(mul(4)(3)(4)); // wynik : 48 ``` #ANSWER# Poniżej znajduje się kod, po którym następuje wyjaśnienie, jak to działa: ```funkcja javascript mul (x) { funkcja zwrotna (y) { // funkcja anonimowa funkcja zwracana (z) { // funkcja anonimowa return x * y * z; }; }; } ``` Tutaj funkcja `mul` przyjmuje pierwszy argument i zwraca funkcję anonimową, która przyjmuje drugi parametr i zwraca funkcję anonimową, która przyjmuje trzeci parametr i zwraca mnożenie argumentów przekazywanych w kolejnych zdefiniowanych funkcjach JavaScript inside ma dostęp do zewnętrznej zmiennej funkcji, a funkcja jest obiektem pierwszej klasy, więc może zostać zwrócona również przez funkcję i przekazana jako argument w innej funkcji. - Funkcja jest instancją typu Object - Funkcja może posiadać właściwości i link do metody jej konstruktora - Funkcję można przechowywać jako zmienną - Funkcję można przekazać jako parametr do innej funkcji - Funkcję można zwrócone z innej funkcjiPrzykład wzięty stąd:
W folderze projektu znajduje się również plik z przykładami
examples/markdown2anki-example.md- w kluczu moduły.markdown.pathToFile
zapisz ścieżkę do pliku, w którym *.md plik pytań/odpowiedzi
- Uruchom z uruchomioną aplikacją ANKI
node data2ankiindex.js - ZYSK!!!
Tak to wygląda na telefonie komórkowym:

Doświadcz mocnych i skutecznych rezultatów
Karty otrzymane w wersji ANKI na komputery stacjonarne synchronizują się bezproblemowo z chmurą ANKI (do 100 MB za darmo) i można z nich korzystać w dowolnym miejscu. Dostępne są aplikacje klienckie Android и iPhone, można również używać w przeglądarce. Więc jeśli masz czas, zamiast bezcelowo przeglądać Facebooka czy oglądać koty na Instagramie, możesz nauczyć się czegoś nowego.
Epilog
Jak wspomniałem, jest to bardziej działający POC, z którego można skorzystać, niż gotowy produkt. Około 30% standardu parsera DSL nie jest zaimplementowane, dlatego też , jest też pomysł, żeby go przepisać JAVASCRIPT, bo zależy mi na „konsekwencji”, a poza tym teraz nie jest to napisane zbyt optymalnie. Teraz parser buduje drzewo, ale moim zdaniem jest to niepotrzebne i nie musi komplikować kodu. W markdown2anki trybie obrazy nie są analizowane. Postaram się sukcesywnie ciąć, ale ponieważ piszę dla siebie, to przede wszystkim rozwiążę problemy, na które sam będę deptać, ale jeśli ktoś chce pomóc, to zapraszam. Jeśli masz pytania dotyczące programu, chętnie pomogę w otwartych kwestiach w odpowiednich projektach. Napisz tutaj inną krytykę i sugestie. Mam nadzieję, że ten projekt komuś się przyda.
PS Jeżeli zauważycie jakieś błędy (a niestety są), napiszcie do mnie w wiadomości prywatnej, wszystko poprawię.
Źródło: www.habr.com

