{"id":14984955,"url":"https://github.com/ayakovlenko/termilingo","last_synced_at":"2025-06-19T05:38:21.280Z","repository":{"id":249791087,"uuid":"832557619","full_name":"ayakovlenko/termilingo","owner":"ayakovlenko","description":"learn new stuff in your terminal","archived":false,"fork":false,"pushed_at":"2024-10-17T08:42:59.000Z","size":92,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T23:14:22.280Z","etag":null,"topics":["deno","duolingo-clone","language-learning","sm2","space-repetition","srs","supermemo"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ayakovlenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-23T09:06:58.000Z","updated_at":"2025-02-22T13:22:19.000Z","dependencies_parsed_at":"2024-10-19T08:32:05.231Z","dependency_job_id":null,"html_url":"https://github.com/ayakovlenko/termilingo","commit_stats":{"total_commits":11,"total_committers":1,"mean_commits":11.0,"dds":0.0,"last_synced_commit":"197ee309b5dd41f18e8cea9882381be41a2553c9"},"previous_names":["ayakovlenko/termilingo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayakovlenko%2Ftermilingo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayakovlenko%2Ftermilingo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayakovlenko%2Ftermilingo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayakovlenko%2Ftermilingo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ayakovlenko","download_url":"https://codeload.github.com/ayakovlenko/termilingo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248312135,"owners_count":21082638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","duolingo-clone","language-learning","sm2","space-repetition","srs","supermemo"],"created_at":"2024-09-24T14:09:55.068Z","updated_at":"2025-04-10T23:14:41.599Z","avatar_url":"https://github.com/ayakovlenko.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Termilingo\n\n![](https://github.com/ayakovlenko/termilingo/actions/workflows/test.yaml/badge.svg)\n[![](https://coveralls.io/repos/github/ayakovlenko/termilingo/badge.svg?branch=main)](https://coveralls.io/github/ayakovlenko/termilingo?branch=main)\n\nTermilingo is a spaced repetition flashcard app designed for use in the\nterminal.\n\nThe app is written in TypeScript and uses Deno as a TypeScript runtime. In order\nto use it, you need install Deno first:\nhttps://docs.deno.com/runtime/manual/getting_started/installation/\n\nIt uses a simple deck format to create flashcards:\n\n```csv\nQuestion,Answer\nFront side,Back side\nFront side,Back side\n```\n\n\u003e [!TIP]\\\n\u003e This is the format of Brainscape CSV export, so they can be used by Termilingo\n\u003e directly.\n\n## Scoring system\n\nTermilingo does not rely on self-assessed scores. Instead, it uses an automated\nperformance scoring system based on the Levenshtein ratio between the correct\nanswer and the answer that you have typed.\n\nSince Termilingo relies on SM2 algorithm, the score is then converted to SM2\ngrade according to the following rules:\n\n| Score range         | Grade |\n| ------------------- | ----- |\n| 0 ≤ score \u003c 0.50    | 0     |\n| 0.50 ≤ score \u003c 0.70 | 1     |\n| 0.70 ≤ score \u003c 0.80 | 2     |\n| 0.80 ≤ score \u003c 0.90 | 3     |\n| 0.90 ≤ score \u003c 1.00 | 4     |\n| score = 1.00        | 5     |\n\n\u003cimg src=\"./docs/score2grade-plot.png\" width=\"50%\"\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ePlot source\u003c/summary\u003e\n\n```python\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# Define the score ranges and corresponding grades\nscore_ranges = [0, 0.5, 0.7, 0.8, 0.9, 1.0]\ngrades = [0, 1, 2, 3, 4, 5]\n\n# Extend the score ranges to create steps\nextended_scores = []\nextended_grades = []\n\nfor i in range(len(score_ranges) - 1):\n    extended_scores.append(score_ranges[i])\n    extended_scores.append(score_ranges[i+1])\n    extended_grades.append(grades[i])\n    extended_grades.append(grades[i])\n\n# Plot the function\nplt.figure(figsize=(10, 6))\nplt.step(extended_scores, extended_grades, where='post', label='score2grade Function', color='b', linewidth=2)\nplt.scatter(score_ranges, grades, color='red')  # Highlight the points\n\n# Adding labels and title\nplt.xlabel('Score')\nplt.ylabel('Grade')\nplt.title('score2grade Function Plot')\nplt.xticks(np.arange(0, 1.1, 0.1))\nplt.yticks(np.arange(6))\nplt.grid(True)\nplt.legend()\nplt.show()\n```\n\n\u003c/details\u003e\n\n## Quickstart\n\nRun with an example deck:\n\n```sh\ndeno task run --deck example-swedish.csv\n```\n\nProvide a path to your own deck and start practicing.\n\nOn the first run, the app will create a complimentary review file following a\nconvention `\u003cdeck-name\u003e.review.yaml` to keep track of the state.\n\n## Thanks\n\nThe app is using an implementation of SM2 by @VienDinhCom.\n\nThe package is copied into [./src/supermemo](./src/supermemo) with the intention\nof modifying it into SM2+ as described in the article by BlueRaja\n[here][sm2plus].\n\n[sm2plus]: https://www.blueraja.com/blog/477/a-better-spaced-repetition-learning-algorithm-sm2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayakovlenko%2Ftermilingo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fayakovlenko%2Ftermilingo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayakovlenko%2Ftermilingo/lists"}