{"id":32650833,"url":"https://github.com/rr-/drill","last_synced_at":"2025-10-31T07:55:04.009Z","repository":{"id":18188491,"uuid":"83699137","full_name":"rr-/drill","owner":"rr-","description":"A CLI program for learning things through spaced repetition. :dog:","archived":false,"fork":false,"pushed_at":"2022-01-28T09:24:20.000Z","size":94,"stargazers_count":99,"open_issues_count":7,"forks_count":14,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-25T06:48:37.843Z","etag":null,"topics":["cli","learning","python","spaced-repetition"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rr-.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-02T16:23:38.000Z","updated_at":"2025-06-04T04:56:05.000Z","dependencies_parsed_at":"2022-07-26T21:17:01.859Z","dependency_job_id":null,"html_url":"https://github.com/rr-/drill","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/rr-/drill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rr-%2Fdrill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rr-%2Fdrill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rr-%2Fdrill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rr-%2Fdrill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rr-","download_url":"https://codeload.github.com/rr-/drill/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rr-%2Fdrill/sbom","scorecard":{"id":786496,"data":{"date":"2025-08-11","repo":{"name":"github.com/rr-/drill","commit":"a3ba4a6610c1f1b7d0fa19ecb6aa8b36626dbea0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":2,"reason":"Found 6/23 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T06:14:51.615Z","repository_id":18188491,"created_at":"2025-08-23T06:14:51.615Z","updated_at":"2025-08-23T06:14:51.615Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281953494,"owners_count":26589146,"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","status":"online","status_checked_at":"2025-10-31T02:00:07.401Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cli","learning","python","spaced-repetition"],"created_at":"2025-10-31T07:54:47.479Z","updated_at":"2025-10-31T07:55:04.003Z","avatar_url":"https://github.com/rr-.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# drill-srs\n\nA CLI program for learning things through [spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition).\n\n### Features\n\n- CLI (ideal for `tmux`+`ssh`)\n- Multiple decks\n- No configuration needed\n- Colorful tags\n- JSON exports/imports for easy deck manipulation\n- HTML reports\n\n![screenshot](https://cloud.githubusercontent.com/assets/1045476/23531471/d7989110-ffa6-11e6-9dad-b9b8201bc07e.png)\n\n\n### Installation\n\nIn the console run:\n\n```\npip install drillsrs\n```\n\n...or, to install the latest version:\n\n```\ngit clone https://github.com/rr-/drill\ncd drill\npip install . --upgrade\n```\n\nThen run `drill-srs` to see the available commands.\n\n### How to use\n\nFlashcards are organized in decks, so that you can study multiple subjects at\nonce. To start studying, first create a deck and populate it with cards\nmanually or through an import.\n\nEach \"study session\" will then display the cards to memorize. Following the\nstudy, you'll be invited to a \"review session\" of all cards shown so far, where\nyour answers will affect how often a given card will be shown for\nre-evaluation. A correct answer increases the card's score by 1, while a\nmistake decreases its score by 1.\n\nThis is how the score translates into the re-evaluation delay:\n\nCard score | Wait time\n---------- | ---------\n0          | none (just after the study session)\n1          | 1 hour\n2          | 3 hours\n3          | 8 hours\n4          | 1 day\n5          | 3 days\n6          | 1 week\n7          | 2 weeks\n8          | 1 month\n9          | 2 months\n10         | 4 months\n\nFor example, if you answered the given card correctly thrice (score 3) and now\nmade a mistake (score is 2 now), this card will re-appear after 8 hours. The\nscore can't fall outside the range in the table.\n\nSuch review system reinforces the quality of the memorization.\n\n### Questions\n\n**Q: Why not anki?**  \nA: I like anki, but there's no CLI version I could use remotely, so I decided\n   to roll my own simple program.\n\n**Q: Why not SuperMemo or other better algorithms?**  \nA: These are cool, but I wanted `drill` to stay simple. Additionally, the\nsystem used by `drill` is very similar to the one used by\n[wanikani.com](//wanikani.com), which I hold in very high regard.\n\n**Q: Why `drill-srs` rather than just `drill`?**  \nA: There's already `drill` package on Python Package Index and then there's\n`drill`, the DNS lookup tool. I chose the name `drill` before considering\nmaking the repository public and that name has sticked with me ever since, so\nafter I decided to publish the program, rather than changing it to something\ncompletely different I added `-srs` suffix (that stands for [spaced repetition\nsoftware](https://en.wikipedia.org/wiki/Spaced_repetition#Software)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frr-%2Fdrill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frr-%2Fdrill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frr-%2Fdrill/lists"}