Hai câu chuyện về cách ANKI có thể giúp bạn học ngoại ngữ và chuẩn bị cho các cuộc phỏng vấn

Tôi luôn tin rằng một lập trình viên lười biếng là một lập trình viên giỏi. Tại sao? Vì yêu cầu một người chăm chỉ làm việc gì thì anh ta sẽ làm việc đó. Và một lập trình viên lười biếng sẽ tốn thời gian gấp 2-3 lần nhưng sẽ viết một đoạn script làm việc đó cho anh ta. Có thể mất một thời gian dài vô lý để thực hiện việc này trong lần đầu tiên, nhưng với các nhiệm vụ lặp đi lặp lại, phương pháp này sẽ mang lại hiệu quả rất nhanh. Tôi coi mình là một lập trình viên lười biếng. Đó là lời mở đầu, bây giờ hãy bắt tay vào công việc.

Câu chuyện một

Một vài năm trước tôi đã tự hỏi làm thế nào tôi có thể cải thiện tiếng Anh của mình. Không có gì tốt hơn đến với tâm trí hơn là đọc văn học. Một máy đọc sách điện tử đã được mua, sách được tải xuống và tôi bắt đầu đọc. Trong khi đọc, tôi liên tục gặp những từ lạ. Tôi ngay lập tức dịch chúng bằng từ điển được tích hợp sẵn trong đầu đọc, nhưng tôi nhận thấy một đặc điểm: những từ đó không muốn được ghi nhớ. Khi tôi gặp lại từ này một vài trang sau, với xác suất 90% là tôi lại cần dịch và điều này luôn xảy ra. Kết luận là chỉ dịch những từ không quen thuộc trong khi đọc là chưa đủ, bạn cần phải làm việc khác. Lựa chọn lý tưởng là đưa nó vào cuộc sống hàng ngày và bắt đầu sử dụng nó, nhưng tôi không sống ở một quốc gia nói tiếng Anh và điều này khó xảy ra. Rồi tôi nhớ ra rằng tôi đã từng đọc về Lặp lại khoảng cách.

Nó là gì và nó được ăn với cái gì? Tóm lại là có cái này đường cong quên lãng, trích dẫn thêm từ Wikipedia:

Ngay trong giờ đầu tiên, có tới 60% tất cả thông tin nhận được sẽ bị quên, 10 giờ sau khi ghi nhớ, 35% những gì đã học vẫn còn trong trí nhớ. Sau đó, quá trình quên diễn ra chậm rãi và sau 6 ngày, khoảng 20% ​​tổng số âm tiết học ban đầu vẫn còn trong bộ nhớ và lượng tương tự vẫn còn trong bộ nhớ sau một tháng.

Và kết luận từ đây

Các kết luận có thể rút ra dựa trên đường cong này là để ghi nhớ hiệu quả, cần phải lặp lại tài liệu đã ghi nhớ.

Vì thế chúng tôi nảy ra một ý tưởng sự lặp lại cách nhau.

АNKI là một chương trình mã nguồn mở và hoàn toàn miễn phí thực hiện ý tưởng lặp lại cách nhau. Nói một cách đơn giản, thẻ flash vi tính có một bên là câu hỏi và một bên là câu trả lời. Vì bạn có thể thực hiện các câu hỏi/câu trả lời bằng cách sử dụng thông thường html/css/javascript, thì chúng ta có thể nói rằng nó thực sự có những khả năng vô hạn. Ngoài ra, nó có thể mở rộng với đặc biệt bổ sung, và một trong số chúng sẽ rất hữu ích cho chúng ta trong tương lai.

Việc tạo thẻ theo cách thủ công rất mất thời gian, tẻ nhạt và có khả năng cao sau một thời gian bạn sẽ quên nhiệm vụ này, và vì vậy đã có lúc tôi tự hỏi mình câu hỏi, liệu có thể tự động hóa nhiệm vụ này hay không. Câu trả lời là có, bạn có thể. Và tôi đã làm được điều đó. Tôi sẽ nói ngay, nó còn hơn thế nữa POC (Bằng chứng về khái niệm), nhưng có thể được sử dụng. Nếu có sự quan tâm từ người dùng và các nhà phát triển khác tham gia thì nó có thể tạo ra một sản phẩm hoàn chỉnh mà ngay cả những người dùng mù chữ về mặt kỹ thuật cũng có thể sử dụng. Bây giờ, việc sử dụng tiện ích của tôi đòi hỏi một số kiến ​​thức về lập trình.

Tôi đọc sách bằng chương trình Đầu đọc AI. Nó có khả năng kết nối từ điển bên ngoài và khi bạn dịch một từ, nó sẽ lưu từ bạn gọi để dịch vào một tệp văn bản. Tất cả những gì còn lại là dịch những từ này và tạo thẻ ANKI.

Lúc đầu tôi cố gắng sử dụng để dịch Google Translate, API Lingvo vân vân. Nhưng mọi thứ đã không thành công với các dịch vụ miễn phí. Tôi đã sử dụng hết giới hạn miễn phí trong quá trình phát triển, ngoài ra, theo điều khoản của giấy phép, tôi không có quyền lưu trữ từ vào bộ nhớ đệm. Đến một lúc nào đó tôi nhận ra rằng tôi cần phải tự mình dịch các từ đó. Kết quả là một mô-đun đã được viết dsl2html mà bạn có thể kết nối từ điển DSL và ai biết cách chuyển chúng thành HTML định dạng.

Đây là giao diện của một mục từ điển trong *. Html, tùy chọn của tôi so với tùy chọn GoldenDict

Hai câu chuyện về cách ANKI có thể giúp bạn học ngoại ngữ và chuẩn bị cho các cuộc phỏng vấn

Trước khi tìm kiếm một từ trong các từ điển được kết nối, tôi mang nó đến dạng từ điển (lemma) sử dụng thư viện Stanford CoreNLP. Trên thực tế, nhờ thư viện này mà tôi bắt đầu viết bằng Java và kế hoạch ban đầu là viết mọi thứ bằng Java, nhưng trong quá trình đó tôi đã tìm thấy thư viện nút-java nhờ đó bạn có thể thực thi mã Java từ nodejs một cách tương đối dễ dàng và một số mã được viết bằng JavaScript. Nếu tôi tìm thấy thư viện này sớm hơn thì sẽ không có một dòng nào được viết bằng Java. Một dự án phụ khác được ra đời trong quá trình này là việc tạo ra kho lưu trữ với tài liệu DSL được tìm thấy trên mạng ở định dạng *.chm, được biến đổi và đưa vào hình dạng thần thánh. Nếu tác giả của tệp gốc là người dùng có biệt hiệu yozhic Khi anh ấy nhìn thấy bài viết này, tôi cảm ơn anh ấy rất nhiều vì công việc anh ấy đã làm, nếu không có tài liệu của anh ấy, rất có thể tôi đã không thành công.

Vì vậy, tôi có một từ bằng tiếng Anh, mục từ điển của nó ở định dạng *. Html, tất cả những gì còn lại là ghép mọi thứ lại với nhau, tạo các bài viết ANKI từ danh sách các từ và nhập chúng vào cơ sở dữ liệu ANKI. Với mục đích này, dự án sau đây đã được tạo ra data2anki. Nó có thể lấy danh sách các từ làm đầu vào, dịch, tạo ANKI *. Html bài viết và ghi lại chúng trong cơ sở dữ liệu ANKI. Cuối bài viết có hướng dẫn cách sử dụng. Trong khi đó, câu chuyện thứ hai là việc lặp lại quãng thời gian có thể hữu ích.

Câu chuyện thứ hai.

Tất cả những người đang tìm kiếm một chuyên ngành có trình độ cao hơn/ít hơn, bao gồm cả lập trình viên, đều phải đối mặt với nhu cầu chuẩn bị cho một cuộc phỏng vấn. Nhiều khái niệm được hỏi trong các cuộc phỏng vấn mà bạn không sử dụng trong thực tế hàng ngày và chúng bị lãng quên. Khi chuẩn bị cho một cuộc phỏng vấn, lật giở các ghi chú, một cuốn sách, một cuốn sách tham khảo, tôi phải đối mặt với thực tế là phải mất rất nhiều thời gian và sự chú ý để sàng lọc những thông tin mà bạn đã biết vì nó không phải lúc nào cũng rõ ràng và bạn phải đọc kỹ để hiểu nó là gì nhé. Khi bạn đến một chủ đề thực sự cần phải lặp lại, điều thường xảy ra là bạn đã mệt mỏi và chất lượng chuẩn bị của bạn bị ảnh hưởng. Đôi khi tôi nghĩ, tại sao không sử dụng thẻ ANKI cho việc này? Ví dụ: khi ghi chép về một chủ đề nào đó, hãy tạo ngay ghi chú dưới dạng câu hỏi và câu trả lời, sau đó khi lặp lại, bạn sẽ biết ngay mình có biết câu trả lời cho câu hỏi này hay không.

Vấn đề duy nhất nảy sinh là việc gõ các câu hỏi rất dài và tẻ nhạt. Để làm cho quá trình dễ dàng hơn, data2anki dự án tôi đã thêm chức năng chuyển đổi đánh dấu văn bản trong thẻ ANKI. Tất cả những gì bạn cần là viết một tệp lớn trong đó các câu hỏi và câu trả lời sẽ được đánh dấu bằng một chuỗi ký tự được xác định trước, nhờ đó trình phân tích cú pháp sẽ hiểu câu hỏi ở đâu và câu trả lời ở đâu.

Khi tệp này được tạo, bạn chạy data2anki và nó sẽ tạo thẻ ANKI. Tệp gốc rất dễ chỉnh sửa và chia sẻ, bạn chỉ cần xóa (các) thẻ tương ứng và chạy lại chương trình, phiên bản mới sẽ được tạo.

Cài đặt và sử dụng

  1. Cài đặt ANKI + AnkiConnect

    1. Tải xuống ANKI từ đây: https://apps.ankiweb.net/
    2. Cài đặt plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Cài đặt data2anki

    1. Đang tải xuống data2anki từ kho github
      git clone https://github.com/anatoly314/data2anki
    2. Cài đặt phụ thuộc
      cd data2anki && npm install
    3. Tải xuống phần phụ thuộc java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Giải nén jar-dependency.zip và đặt nội dung của nó vào data2anki/java/lọ

  3. Dùng để dịch từ:

    1. Trong tập tin data2anki/config.json:

      • trong chìa khóa chế độ nhập giá trị dsl2anki

      • trong chìa khóa module.dsl.anki.deckName и module.dsl.anki.modelName viết phù hợp Tên bộ bài и Tên Model (phải được tạo trước khi tạo thẻ). Hiện tại chỉ có loại mô hình được hỗ trợ Cơ bản:

        Có các trường Mặt trước và Mặt sau và sẽ tạo một thẻ. Văn bản bạn nhập ở Mặt trước sẽ xuất hiện ở mặt trước của thẻ và văn bản bạn nhập ở Mặt sau sẽ xuất hiện ở mặt sau của thẻ.

        từ gốc ở đâu? Trường phía trước, và bản dịch sẽ ở Trường sau.

        Không có vấn đề gì khi thêm hỗ trợ Cơ bản (và thẻ đảo ngược), trong đó một thẻ đảo ngược sẽ được tạo cho từ và bản dịch, trong đó dựa trên bản dịch, bạn sẽ cần phải nhớ từ gốc. Tất cả những gì bạn cần là thời gian và mong muốn.

      • trong chìa khóa module.dsl.dictionariesPath đăng ký một mảng với kết nối *.dsl từ điển. Mỗi từ điển được kết nối là một thư mục chứa các tệp từ điển theo định dạng: Cấu trúc từ điển DSL

      • trong chìa khóa module.dsl.wordToTranslatePath nhập đường dẫn đến danh sách từ muốn dịch.

    2. Khởi chạy với ứng dụng ANKI đang chạy
      node data2ankiindex.js
    3. LỢI NHUẬN!!!

  4. Công dụng tạo thẻ từ markdown

    1. Trong tập tin data2anki/config.json:

      • trong chìa khóa chế độ nhập giá trị markdown2anki
      • trong chìa khóa module.markdown.anki.deckName и module.dsl.anki.modelName viết phù hợp Tên bộ bài и Tên Model (phải được tạo trước khi tạo thẻ). Vì markdown2anki chế độ chỉ loại mô hình được hỗ trợ Cơ bản.
      • trong chìa khóa module.markdown.selector.startQuestionSelectors и module.markdown.selectors.startAnswerSelectors bạn viết các bộ chọn để đánh dấu phần đầu của câu hỏi và câu trả lời. Dòng có bộ chọn sẽ không được phân tích cú pháp và sẽ không xuất hiện trong thẻ; trình phân tích cú pháp sẽ bắt đầu làm việc từ dòng tiếp theo.

        Ví dụ: thẻ câu hỏi/câu trả lời này:

        Hai câu chuyện về cách ANKI có thể giúp bạn học ngoại ngữ và chuẩn bị cho các cuộc phỏng vấn

        Nó sẽ trông như thế này trong markdown:
        #QUESTION# ## Câu hỏi 5. Viết một hàm mul sẽ hoạt động bình thường khi được gọi với cú pháp sau. ```javascript console.log(mul(2)(3)(4)); // đầu ra : 24 console.log(mul(4)(3)(4)); // đầu ra : 48 ``` #ANSWER# Dưới đây là đoạn mã kèm theo lời giải thích về cách thức hoạt động của nó: ```javascript function mul (x) { return function (y) { // hàm ẩn danh return function (z) { // hàm ẩn danh return x * y * z; }; }; } ``` Ở đây, hàm `mul` chấp nhận đối số đầu tiên và trả về hàm ẩn danh nhận tham số thứ hai và trả về hàm ẩn danh nhận tham số thứ ba và trả về phép nhân của các đối số được truyền liên tiếp Trong hàm Javascript được xác định bên trong có quyền truy cập vào biến hàm bên ngoài và hàm là đối tượng hạng nhất nên nó cũng có thể được hàm trả về và truyền dưới dạng đối số trong hàm khác. - Hàm là một thể hiện của kiểu Đối tượng - Hàm có thể có các thuộc tính và có liên kết quay lại phương thức khởi tạo của nó - Hàm có thể được lưu dưới dạng biến - Hàm có thể được truyền dưới dạng tham số cho hàm khác - Hàm có thể được trả về từ một hàm khác
        

        Ví dụ được lấy từ đây : 123-JavaScript-Phỏng vấn-Câu hỏi

        Ngoài ra còn có một tệp có ví dụ trong thư mục dự án examples/markdown2anki-example.md

      • trong chìa khóa mô-đun.markdown.pathToFile
        ghi đường dẫn tới file *.md tập tin câu hỏi/câu trả lời

    2. Khởi chạy với ứng dụng ANKI đang chạy
      node data2ankiindex.js
    3. LỢI NHUẬN!!!

Đây là những gì nó trông giống như trên điện thoại di động:

Kết quả

Thẻ nhận được trên phiên bản ANKI dành cho máy tính để bàn được đồng bộ hóa mà không gặp sự cố với đám mây ANKI (miễn phí lên tới 100mb) và sau đó bạn có thể sử dụng chúng ở mọi nơi. Có ứng dụng khách dành cho Android và iPhone và bạn cũng có thể sử dụng nó trong trình duyệt. Do đó, nếu bạn có thời gian mà không có gì để chi tiêu, thì thay vì lướt Facebook hoặc mèo trên Instagram một cách vô mục đích, bạn có thể học được điều gì đó mới.

Phần kết

Như tôi đã đề cập, đây giống như một POC đang hoạt động mà bạn có thể sử dụng hơn là một sản phẩm hoàn chỉnh. Khoảng 30% tiêu chuẩn trình phân tích cú pháp DSL không được triển khai và do đó, ví dụ: không thể tìm thấy tất cả các mục từ điển có trong từ điển, cũng có một ý tưởng là viết lại nó trong JavaScript, bởi vì tôi muốn “sự nhất quán”, hơn nữa, bây giờ nó được viết không được tối ưu cho lắm. Bây giờ trình phân tích cú pháp đang xây dựng một cây, nhưng theo tôi điều này là không cần thiết và không cần làm phức tạp mã. TRONG markdown2anki chế độ, hình ảnh không được phân tích cú pháp. Tôi sẽ cố gắng cắt giảm từng chút một, nhưng vì tôi đang viết cho chính mình nên trước hết tôi sẽ giải quyết những vấn đề mà chính tôi sẽ vướng phải, nhưng nếu có ai muốn giúp đỡ thì rất hoan nghênh. Nếu bạn có thắc mắc về chương trình, tôi sẽ sẵn lòng trợ giúp giải quyết các vấn đề mở trong các dự án liên quan. Viết những lời chỉ trích và đề xuất khác ở đây. Tôi hy vọng dự án này sẽ hữu ích cho ai đó.

Tái bút Nếu bạn nhận thấy bất kỳ lỗi nào (và thật không may là có một số lỗi), hãy viết thư cho tôi bằng tin nhắn cá nhân, tôi sẽ sửa mọi thứ.

Nguồn: www.habr.com

Thêm một lời nhận xét