{"id":16604189,"url":"https://github.com/mkeeter/states-machine","last_synced_at":"2025-07-12T14:42:44.289Z","repository":{"id":140485750,"uuid":"238931497","full_name":"mkeeter/states-machine","owner":"mkeeter","description":"Memorize the names and location of US states with spaced repetition","archived":false,"fork":false,"pushed_at":"2021-03-24T16:58:27.000Z","size":4367,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-09T08:44:10.250Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://mattkeeter.com/projects/states","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkeeter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-02-07T13:34:17.000Z","updated_at":"2021-11-02T00:49:01.000Z","dependencies_parsed_at":"2023-03-13T10:41:57.402Z","dependency_job_id":null,"html_url":"https://github.com/mkeeter/states-machine","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mkeeter/states-machine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fstates-machine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fstates-machine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fstates-machine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fstates-machine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkeeter","download_url":"https://codeload.github.com/mkeeter/states-machine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fstates-machine/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265005030,"owners_count":23696531,"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":[],"created_at":"2024-10-12T00:56:08.777Z","updated_at":"2025-07-12T14:42:44.283Z","avatar_url":"https://github.com/mkeeter.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# States Machine\n[Homepage](https://mattkeeter.com/projects/states) |\n[Repository](https://github.com/mkeeter/states-machine)\n\n**States Machine** is an app to memorize the names and locations of the fifty US states\nusing [spaced repetition](https://en.wikipedia.org/wiki/Spaced_repetition).\n\n![Example](example.png)\n\n## Aesthetics\n- Smooth vector graphics, using real [US Census Bureau shapefiles](https://www.census.gov/geographies/mapping-files/time-series/geo/carto-boundary-file.html)\n- UI inspired by [Material Design](https://material.io/design/), using [Inconsolata](https://fonts.google.com/specimen/Inconsolata) for text\n- Starts up in less than one second\n- Deployed as a single static binary, about 1.1 MB zipped\n\n## Foundations\n- Uses OpenGL 3.3 for graphics\n  - Windowing: [GLFW](https://www.glfw.org/)\n  - OpenGL loading: [GLEW](http://glew.sourceforge.net/)\n  - Font rendering: [stb_truetype.h](https://github.com/nothings/stb/blob/master/stb_truetype.h)\n- Uses an [SQLite](https://www.sqlite.org/index.html) database to store progress\n- Implements the [SM2 algorithm](https://www.supermemo.com/en/archives1990-2015/english/ol/sm2) to plan repetitions\n- Written almost entirely in austere C\n\n# Platforms\nSetting expectations up front,\n**States Machine** is mostly [for me](https://www.robinsloan.com/notes/home-cooked-app/),\nso I won't be making any major effort to make it\nrun on machines other than my own.\n\nIf you'd like to run it on (hypothetically speaking)\nArch Linux or OpenBSD,\nyou're entirely welcome,\nbut you'll have to do most of the legwork.\n\n| OS           | Compiler                 | Maintainer                             | Notes                     |\n| -            | -                        | -                                      | -                         |\n| macOS        | `llvm`                   | [@mkeeter](https://github.com/mkeeter) | Main development platform |\n| Windows      | `x86_64-w64-mingw32-gcc` | Not officially supported               | Only tested in Wine       |\n| Your OS here | `???`                    | Your username here                     | Contributors welcome!     |\n\nOther platforms will be supported if implemented and maintained by other contributors.\n\nTo become a platform maintainer, open a PR which:\n- Implements a new platform\n- Add details to the table above\n- Updates the **Compiling** instructions below.\n\n# Releases\nBinary builds are [available on Github](https://github.com/mkeeter/states-machine/releases)\nfor macOS and Windows.\n\nThe macOS application is not signed or notarized,\nso you may need to right-click → Open instead of double-clicking.\n\n# Compiling\nAt the moment, **States Machine** supports two targets:\n\n- Compiling a native application on macOS\n- Cross-compiling from macOS to Windows (if `TARGET=win32-cross` is set)\n\n## Building dependencies\nGLFW is shipped in the repository, to easily build a static binary.  It only needs to be compiled once.\n```\n[env TARGET=win32-cross] make glfw\n```\n\n## Building\n```\n[env TARGET=win32-cross] make\n```\n\n## Deploying an application bundle\n```\n[env TARGET=win32-cross] make deploy\n```\nwhich executes [`deploy/darwin/deploy.sh`](https://github.com/mkeeter/states-machine/blob/master/deploy/darwin/deploy.sh)\n(Mac) or\n[`deploy/win32/deploy.sh`](https://github.com/mkeeter/states-machine/blob/master/deploy/win32/deploy.sh) (cross-compiling to Windows).\n\nThis command\nproduces the disk image `States Machine.dmg` (macOS)\nor the zip archive `States Machine.zip` (Windows).\n\nNote that this does not sign / notarize / apostille the application bundle.\n\n# License\n© 2019-2020 Matthew Keeter  \n**States Machine** is released under the [MPL 2.0 license](https://www.mozilla.org/en-US/MPL/2.0/)\n\n## Third-party software and data\n**States Machine** includes the following libraries and data:\n- GLEW: [Modified BSD license](https://github.com/mkeeter/states-machine/blob/master/vendor/glew/LICENSE.txt)\n- GLFW: [zlib/libpng license](https://github.com/mkeeter/states-machine/blob/master/vendor/glfw/LICENSE.md)\n- SQLite: [Public domain](https://www.sqlite.org/copyright.html)\n- `stb_truetype` and `stb_rectpack`: [MIT / public domain](https://github.com/mkeeter/states-machine/blob/master/vendor/stb/stb_truetype.h#L4975-L5009)\n- Inconsolata font: [Open Font License](http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi\u0026id=OFL_web)\n- Shapefiles from US Census: [Public domain, presumably](https://en.wikipedia.org/wiki/Copyright_status_of_works_by_the_federal_government_of_the_United_States)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkeeter%2Fstates-machine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkeeter%2Fstates-machine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkeeter%2Fstates-machine/lists"}