{"id":46092,"name":"Open Acidification Project","description":"Apparatus to determine total alkalinity in sea water using an open-cell titration.","url":"https://github.com/Open-Acidification/AlkalinityTitrator","last_synced_at":"2026-04-09T00:01:17.237Z","repository":{"id":40954995,"uuid":"235752011","full_name":"Open-Acidification/AlkalinityTitrator","owner":"Open-Acidification","description":"Apparatus to determine total alkalinity in sea water using an open-cell titration","archived":false,"fork":false,"pushed_at":"2025-08-25T18:49:38.000Z","size":2817,"stargazers_count":8,"open_issues_count":20,"forks_count":11,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-29T19:32:22.718Z","etag":null,"topics":["alkalinity-titrator","ocean-acidification","raspberry-pi"],"latest_commit_sha":null,"homepage":"https://open-acidification.github.io/","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/Open-Acidification.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-23T08:20:38.000Z","updated_at":"2026-02-07T22:34:27.000Z","dependencies_parsed_at":"2025-09-09T15:38:33.856Z","dependency_job_id":"731ae9e1-6dec-4802-b67d-a50ca75aceca","html_url":"https://github.com/Open-Acidification/AlkalinityTitrator","commit_stats":{"total_commits":162,"total_committers":9,"mean_commits":18.0,"dds":0.3950617283950617,"last_synced_commit":"cd38c9d1d3fb12fd12669ec746b7f075616f2a01"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Open-Acidification/AlkalinityTitrator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Open-Acidification","download_url":"https://codeload.github.com/Open-Acidification/AlkalinityTitrator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31492751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"owner":{"login":"Open-Acidification","name":"Open Acidification Project","uuid":"57500501","kind":"organization","description":"","email":null,"website":"https://open-acidification.github.io/","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/57500501?v=4","repositories_count":11,"last_synced_at":"2023-03-04T02:59:47.330Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/Open-Acidification","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-14T08:37:48.000Z","updated_at":"2023-03-04T02:59:47.400Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Open-Acidification","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Open-Acidification/repositories"},"packages":[],"commits":{"id":1358746,"full_name":"Open-Acidification/AlkalinityTitrator","default_branch":"main","total_commits":163,"total_committers":8,"total_bot_commits":8,"total_bot_committers":1,"mean_commits":20.375,"dds":0.38650306748466257,"past_year_total_commits":1,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":1.0,"past_year_dds":0.0,"last_synced_at":"2026-04-06T23:09:59.156Z","last_synced_commit":"62b7d0174f10bcfdfcef44a5f6a759346cf24e72","created_at":"2023-09-13T08:46:44.768Z","updated_at":"2026-04-06T23:09:04.364Z","committers":[{"name":"kadensu","email":"ksukachevin@gmail.com","login":"kadensu","count":100},{"name":"Taylor Smith","email":"83837157+TaylorSmith28","login":"TaylorSmith28","count":30},{"name":"Preston Carman","email":"preston.carman@wallawalla.edu","login":"prestoncarman","count":14},{"name":"allcontributors[bot]","email":"46447321+allcontributors[bot]","login":"allcontributors[bot]","count":8},{"name":"Konrad McClure","email":"66455502+KonradMcClure","login":"KonradMcClure","count":7},{"name":"Josh Soref","email":"2119212+jsoref","login":"jsoref","count":2},{"name":"Kieran Sukachevin","email":"54186484+kieransukachevin","login":"kieransukachevin","count":1},{"name":"Barun Debnath","email":"52271502+d-cryptic","login":"d-cryptic","count":1}],"past_year_committers":[{"name":"Preston Carman","email":"preston.carman@wallawalla.edu","login":"prestoncarman","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:23.197Z","repositories_count":6212577,"commits_count":914700709,"contributors_count":35335598,"owners_count":1143285,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"Open-Acidification/AlkalinityTitrator","html_url":"https://github.com/Open-Acidification/AlkalinityTitrator","last_synced_at":"2026-01-08T04:03:49.546Z","status":"error","issues_count":40,"pull_requests_count":62,"avg_time_to_close_issue":28443185.43478261,"avg_time_to_close_pull_request":1396443.3278688525,"issues_closed_count":23,"pull_requests_closed_count":61,"pull_request_authors_count":9,"issue_authors_count":5,"avg_comments_per_issue":1.025,"avg_comments_per_pull_request":0.6935483870967742,"merged_pull_requests_count":46,"bot_issues_count":0,"bot_pull_requests_count":6,"past_year_issues_count":0,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":857.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"created_at":"2023-09-13T08:47:31.300Z","updated_at":"2026-01-08T04:03:49.547Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/issues","issue_labels_count":{"enhancement":11,"good first issue":6,"documentation":2,"question":2,"bug":2,"invalid":2},"pull_request_labels_count":{"enhancement":11,"bug":3,"dependencies":2,"question":1},"issue_author_associations_count":{"CONTRIBUTOR":39,"MEMBER":1},"pull_request_author_associations_count":{"CONTRIBUTOR":57,"MEMBER":3,"NONE":2},"issue_authors":{"TaylorSmith28":18,"KonradMcClure":15,"kieransukachevin":5,"kadensu":1,"prestoncarman":1},"pull_request_authors":{"TaylorSmith28":43,"KonradMcClure":4,"allcontributors[bot]":4,"prestoncarman":3,"dependabot[bot]":2,"kadensu":2,"jsoref":2,"kieransukachevin":1,"d-cryptic":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:10.509Z","repositories_count":14152489,"issues_count":34540646,"pull_requests_count":112881332,"authors_count":11230766,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"MEMBER":2},"past_year_issue_authors":{},"past_year_pull_request_authors":{"prestoncarman":2},"maintainers":[{"login":"prestoncarman","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/prestoncarman"}],"active_maintainers":[{"login":"prestoncarman","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/prestoncarman"}]},"events":{"total":{"PullRequestEvent":3,"ForkEvent":2,"WatchEvent":2},"last_year":{"PullRequestEvent":3,"ForkEvent":2,"WatchEvent":2}},"keywords":["alkalinity-titrator","ocean-acidification","raspberry-pi"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/check-spelling.yml","sha":null,"kind":"manifest","created_at":"2023-02-19T15:01:01.029Z","updated_at":"2023-02-19T15:01:01.029Z","repository_link":"https://github.com/Open-Acidification/AlkalinityTitrator/blob/main/.github/workflows/check-spelling.yml","dependencies":[{"id":7790402887,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7790402888,"package_name":"codespell-project/actions-codespell","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/linter.yml","sha":null,"kind":"manifest","created_at":"2023-02-19T15:01:01.127Z","updated_at":"2023-02-19T15:01:01.127Z","repository_link":"https://github.com/Open-Acidification/AlkalinityTitrator/blob/main/.github/workflows/linter.yml","dependencies":[{"id":7790403285,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7790403286,"package_name":"docker://ghcr.io/github/super-linter","ecosystem":"actions","requirements":"slim-v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pytest.yml","sha":null,"kind":"manifest","created_at":"2023-02-19T15:01:01.197Z","updated_at":"2023-02-19T15:01:01.197Z","repository_link":"https://github.com/Open-Acidification/AlkalinityTitrator/blob/main/.github/workflows/pytest.yml","dependencies":[{"id":7790403632,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7790403633,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"Pipfile","sha":null,"kind":"manifest","created_at":"2022-09-18T09:14:59.057Z","updated_at":"2022-09-18T09:14:59.057Z","repository_link":"https://github.com/Open-Acidification/AlkalinityTitrator/blob/main/Pipfile","dependencies":[{"id":5251523233,"package_name":"adafruit-blinka","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523234,"package_name":"adafruit-circuitpython-ads1x15","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523235,"package_name":"adafruit-circuitpython-lis3dh","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523236,"package_name":"adafruit-circuitpython-max31865","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523237,"package_name":"gpiozero","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523238,"package_name":"pad4pi","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523239,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523240,"package_name":"pep8","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523241,"package_name":"pyserial","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523242,"package_name":"rpi.gpio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523243,"package_name":"smbus2","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523244,"package_name":"pynput","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523245,"package_name":"keyboard","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523246,"package_name":"click","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":5251523247,"package_name":"flake8","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":5251523248,"package_name":"isort","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":5251523249,"package_name":"pycodestyle","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":5251523250,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":5251523251,"package_name":"pylint","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":5251523252,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":5251523253,"package_name":"pytest-mock","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false}]},{"ecosystem":"pypi","filepath":"Pipfile.lock","sha":null,"kind":"lockfile","created_at":"2022-09-18T09:14:59.084Z","updated_at":"2022-09-18T09:14:59.084Z","repository_link":"https://github.com/Open-Acidification/AlkalinityTitrator/blob/main/Pipfile.lock","dependencies":[{"id":5251523254,"package_name":"adafruit-blinka","ecosystem":"pypi","requirements":"==7.0.1","direct":false,"kind":"runtime","optional":false},{"id":5251523255,"package_name":"adafruit-circuitpython-ads1x15","ecosystem":"pypi","requirements":"==2.2.12","direct":false,"kind":"runtime","optional":false},{"id":5251523256,"package_name":"adafruit-circuitpython-busdevice","ecosystem":"pypi","requirements":"==5.1.8","direct":false,"kind":"runtime","optional":false},{"id":5251523257,"package_name":"adafruit-circuitpython-lis3dh","ecosystem":"pypi","requirements":"==5.1.13","direct":false,"kind":"runtime","optional":false},{"id":5251523258,"package_name":"adafruit-circuitpython-max31865","ecosystem":"pypi","requirements":"==2.2.12","direct":false,"kind":"runtime","optional":false},{"id":5251523259,"package_name":"adafruit-circuitpython-typing","ecosystem":"pypi","requirements":"==1.1.1","direct":false,"kind":"runtime","optional":false},{"id":5251523260,"package_name":"adafruit-platformdetect","ecosystem":"pypi","requirements":"==3.20.0","direct":false,"kind":"runtime","optional":false},{"id":5251523261,"package_name":"adafruit-pureio","ecosystem":"pypi","requirements":"==1.1.9","direct":false,"kind":"runtime","optional":false},{"id":5251523262,"package_name":"click","ecosystem":"pypi","requirements":"==8.0.4","direct":false,"kind":"runtime","optional":false},{"id":5251523263,"package_name":"colorzero","ecosystem":"pypi","requirements":"==2.0","direct":false,"kind":"runtime","optional":false},{"id":5251523264,"package_name":"gpiozero","ecosystem":"pypi","requirements":"==1.6.2","direct":false,"kind":"runtime","optional":false},{"id":5251523265,"package_name":"keyboard","ecosystem":"pypi","requirements":"==0.13.5","direct":false,"kind":"runtime","optional":false},{"id":5251523266,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.22.2","direct":false,"kind":"runtime","optional":false},{"id":5251523267,"package_name":"pad4pi","ecosystem":"pypi","requirements":"==1.1.5","direct":false,"kind":"runtime","optional":false},{"id":5251523268,"package_name":"pandas","ecosystem":"pypi","requirements":"==1.4.1","direct":false,"kind":"runtime","optional":false},{"id":5251523269,"package_name":"pep8","ecosystem":"pypi","requirements":"==1.7.1","direct":false,"kind":"runtime","optional":false},{"id":5251523270,"package_name":"pyftdi","ecosystem":"pypi","requirements":"==0.53.3","direct":false,"kind":"runtime","optional":false},{"id":5251523271,"package_name":"pynput","ecosystem":"pypi","requirements":"==1.7.6","direct":false,"kind":"runtime","optional":false},{"id":5251523272,"package_name":"pyobjc","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523273,"package_name":"pyobjc-core","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523274,"package_name":"pyobjc-framework-accessibility","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523275,"package_name":"pyobjc-framework-accounts","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523276,"package_name":"pyobjc-framework-addressbook","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523277,"package_name":"pyobjc-framework-adservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523278,"package_name":"pyobjc-framework-adsupport","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523279,"package_name":"pyobjc-framework-applescriptkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523280,"package_name":"pyobjc-framework-applescriptobjc","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523281,"package_name":"pyobjc-framework-applicationservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523282,"package_name":"pyobjc-framework-apptrackingtransparency","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523283,"package_name":"pyobjc-framework-audiovideobridging","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523284,"package_name":"pyobjc-framework-authenticationservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523285,"package_name":"pyobjc-framework-automaticassessmentconfiguration","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523286,"package_name":"pyobjc-framework-automator","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523287,"package_name":"pyobjc-framework-avfoundation","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523288,"package_name":"pyobjc-framework-avkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523289,"package_name":"pyobjc-framework-businesschat","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523290,"package_name":"pyobjc-framework-calendarstore","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523291,"package_name":"pyobjc-framework-callkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523292,"package_name":"pyobjc-framework-cfnetwork","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523293,"package_name":"pyobjc-framework-classkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523294,"package_name":"pyobjc-framework-cloudkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523295,"package_name":"pyobjc-framework-cocoa","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523296,"package_name":"pyobjc-framework-collaboration","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523297,"package_name":"pyobjc-framework-colorsync","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523298,"package_name":"pyobjc-framework-contacts","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523299,"package_name":"pyobjc-framework-contactsui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523300,"package_name":"pyobjc-framework-coreaudio","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523301,"package_name":"pyobjc-framework-coreaudiokit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523302,"package_name":"pyobjc-framework-corebluetooth","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523303,"package_name":"pyobjc-framework-coredata","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523304,"package_name":"pyobjc-framework-corehaptics","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523305,"package_name":"pyobjc-framework-corelocation","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523306,"package_name":"pyobjc-framework-coremedia","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523307,"package_name":"pyobjc-framework-coremediaio","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523308,"package_name":"pyobjc-framework-coremidi","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523309,"package_name":"pyobjc-framework-coreml","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523310,"package_name":"pyobjc-framework-coremotion","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523311,"package_name":"pyobjc-framework-coreservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523312,"package_name":"pyobjc-framework-corespotlight","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523313,"package_name":"pyobjc-framework-coretext","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523314,"package_name":"pyobjc-framework-corewlan","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523315,"package_name":"pyobjc-framework-cryptotokenkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523316,"package_name":"pyobjc-framework-datadetection","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523317,"package_name":"pyobjc-framework-devicecheck","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523318,"package_name":"pyobjc-framework-dictionaryservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523319,"package_name":"pyobjc-framework-discrecording","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523320,"package_name":"pyobjc-framework-discrecordingui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523321,"package_name":"pyobjc-framework-diskarbitration","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523322,"package_name":"pyobjc-framework-dvdplayback","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523323,"package_name":"pyobjc-framework-eventkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523324,"package_name":"pyobjc-framework-exceptionhandling","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523325,"package_name":"pyobjc-framework-executionpolicy","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523326,"package_name":"pyobjc-framework-externalaccessory","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523327,"package_name":"pyobjc-framework-fileprovider","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523328,"package_name":"pyobjc-framework-fileproviderui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523329,"package_name":"pyobjc-framework-findersync","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523330,"package_name":"pyobjc-framework-fsevents","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523331,"package_name":"pyobjc-framework-gamecenter","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523332,"package_name":"pyobjc-framework-gamecontroller","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523333,"package_name":"pyobjc-framework-gamekit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523334,"package_name":"pyobjc-framework-gameplaykit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523335,"package_name":"pyobjc-framework-imagecapturecore","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523336,"package_name":"pyobjc-framework-imserviceplugin","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523337,"package_name":"pyobjc-framework-inputmethodkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523338,"package_name":"pyobjc-framework-installerplugins","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523339,"package_name":"pyobjc-framework-instantmessage","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523340,"package_name":"pyobjc-framework-intents","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523341,"package_name":"pyobjc-framework-intentsui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523342,"package_name":"pyobjc-framework-iosurface","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523343,"package_name":"pyobjc-framework-ituneslibrary","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523344,"package_name":"pyobjc-framework-kernelmanagement","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523345,"package_name":"pyobjc-framework-latentsemanticmapping","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523346,"package_name":"pyobjc-framework-launchservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523347,"package_name":"pyobjc-framework-libdispatch","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523348,"package_name":"pyobjc-framework-linkpresentation","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523349,"package_name":"pyobjc-framework-localauthentication","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523350,"package_name":"pyobjc-framework-localauthenticationembeddedui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523351,"package_name":"pyobjc-framework-mailkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523352,"package_name":"pyobjc-framework-mapkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523353,"package_name":"pyobjc-framework-mediaaccessibility","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523354,"package_name":"pyobjc-framework-medialibrary","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523355,"package_name":"pyobjc-framework-mediaplayer","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523356,"package_name":"pyobjc-framework-mediatoolbox","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523357,"package_name":"pyobjc-framework-metal","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523358,"package_name":"pyobjc-framework-metalkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523359,"package_name":"pyobjc-framework-metalperformanceshaders","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523360,"package_name":"pyobjc-framework-metalperformanceshadersgraph","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523361,"package_name":"pyobjc-framework-metrickit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523362,"package_name":"pyobjc-framework-mlcompute","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523363,"package_name":"pyobjc-framework-modelio","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523364,"package_name":"pyobjc-framework-multipeerconnectivity","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523365,"package_name":"pyobjc-framework-naturallanguage","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523366,"package_name":"pyobjc-framework-netfs","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523367,"package_name":"pyobjc-framework-network","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523368,"package_name":"pyobjc-framework-networkextension","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523369,"package_name":"pyobjc-framework-notificationcenter","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523370,"package_name":"pyobjc-framework-opendirectory","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523371,"package_name":"pyobjc-framework-osakit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523372,"package_name":"pyobjc-framework-oslog","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523373,"package_name":"pyobjc-framework-passkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523374,"package_name":"pyobjc-framework-pencilkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523375,"package_name":"pyobjc-framework-photos","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523376,"package_name":"pyobjc-framework-photosui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523377,"package_name":"pyobjc-framework-preferencepanes","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523378,"package_name":"pyobjc-framework-pushkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523379,"package_name":"pyobjc-framework-quartz","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523380,"package_name":"pyobjc-framework-quicklookthumbnailing","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523381,"package_name":"pyobjc-framework-replaykit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523382,"package_name":"pyobjc-framework-safariservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523383,"package_name":"pyobjc-framework-scenekit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523384,"package_name":"pyobjc-framework-screensaver","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523385,"package_name":"pyobjc-framework-screentime","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523386,"package_name":"pyobjc-framework-scriptingbridge","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523387,"package_name":"pyobjc-framework-searchkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523388,"package_name":"pyobjc-framework-security","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523389,"package_name":"pyobjc-framework-securityfoundation","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523390,"package_name":"pyobjc-framework-securityinterface","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523391,"package_name":"pyobjc-framework-servicemanagement","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523392,"package_name":"pyobjc-framework-shazamkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523393,"package_name":"pyobjc-framework-social","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523394,"package_name":"pyobjc-framework-soundanalysis","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523395,"package_name":"pyobjc-framework-speech","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523396,"package_name":"pyobjc-framework-spritekit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523397,"package_name":"pyobjc-framework-storekit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523398,"package_name":"pyobjc-framework-syncservices","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523399,"package_name":"pyobjc-framework-systemconfiguration","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523400,"package_name":"pyobjc-framework-systemextensions","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523401,"package_name":"pyobjc-framework-uniformtypeidentifiers","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523402,"package_name":"pyobjc-framework-usernotifications","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523403,"package_name":"pyobjc-framework-usernotificationsui","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523404,"package_name":"pyobjc-framework-videosubscriberaccount","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523405,"package_name":"pyobjc-framework-videotoolbox","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523406,"package_name":"pyobjc-framework-virtualization","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523407,"package_name":"pyobjc-framework-vision","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523408,"package_name":"pyobjc-framework-webkit","ecosystem":"pypi","requirements":"==8.3","direct":false,"kind":"runtime","optional":false},{"id":5251523409,"package_name":"pyserial","ecosystem":"pypi","requirements":"==3.5","direct":false,"kind":"runtime","optional":false},{"id":5251523410,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.8.2","direct":false,"kind":"runtime","optional":false},{"id":5251523411,"package_name":"pytz","ecosystem":"pypi","requirements":"==2021.3","direct":false,"kind":"runtime","optional":false},{"id":5251523412,"package_name":"pyusb","ecosystem":"pypi","requirements":"==1.2.1","direct":false,"kind":"runtime","optional":false},{"id":5251523413,"package_name":"rpi.gpio","ecosystem":"pypi","requirements":"==0.7.1","direct":false,"kind":"runtime","optional":false},{"id":5251523414,"package_name":"setuptools","ecosystem":"pypi","requirements":"==60.9.3","direct":false,"kind":"runtime","optional":false},{"id":5251523415,"package_name":"six","ecosystem":"pypi","requirements":"==1.16.0","direct":false,"kind":"runtime","optional":false},{"id":5251523416,"package_name":"smbus2","ecosystem":"pypi","requirements":"==0.4.1","direct":false,"kind":"runtime","optional":false},{"id":5251523417,"package_name":"astroid","ecosystem":"pypi","requirements":"==2.9.3","direct":false,"kind":"develop","optional":false},{"id":5251523418,"package_name":"attrs","ecosystem":"pypi","requirements":"==21.4.0","direct":false,"kind":"develop","optional":false},{"id":5251523419,"package_name":"coverage","ecosystem":"pypi","requirements":"==6.3.2","direct":false,"kind":"develop","optional":false},{"id":5251523420,"package_name":"flake8","ecosystem":"pypi","requirements":"==4.0.1","direct":false,"kind":"develop","optional":false},{"id":5251523421,"package_name":"iniconfig","ecosystem":"pypi","requirements":"==1.1.1","direct":false,"kind":"develop","optional":false},{"id":5251523422,"package_name":"isort","ecosystem":"pypi","requirements":"==5.10.1","direct":false,"kind":"develop","optional":false},{"id":5251523423,"package_name":"lazy-object-proxy","ecosystem":"pypi","requirements":"==1.7.1","direct":false,"kind":"develop","optional":false},{"id":5251523424,"package_name":"mccabe","ecosystem":"pypi","requirements":"==0.6.1","direct":false,"kind":"develop","optional":false},{"id":5251523425,"package_name":"packaging","ecosystem":"pypi","requirements":"==21.3","direct":false,"kind":"develop","optional":false},{"id":5251523426,"package_name":"platformdirs","ecosystem":"pypi","requirements":"==2.5.1","direct":false,"kind":"develop","optional":false},{"id":5251523427,"package_name":"pluggy","ecosystem":"pypi","requirements":"==1.0.0","direct":false,"kind":"develop","optional":false},{"id":5251523428,"package_name":"py","ecosystem":"pypi","requirements":"==1.11.0","direct":false,"kind":"develop","optional":false},{"id":5251523429,"package_name":"pycodestyle","ecosystem":"pypi","requirements":"==2.8.0","direct":false,"kind":"develop","optional":false},{"id":5251523430,"package_name":"pyflakes","ecosystem":"pypi","requirements":"==2.4.0","direct":false,"kind":"develop","optional":false},{"id":5251523431,"package_name":"pylint","ecosystem":"pypi","requirements":"==2.12.2","direct":false,"kind":"develop","optional":false},{"id":5251523432,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.0.7","direct":false,"kind":"develop","optional":false},{"id":5251523433,"package_name":"pytest","ecosystem":"pypi","requirements":"==7.0.1","direct":false,"kind":"develop","optional":false},{"id":5251523434,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"==3.0.0","direct":false,"kind":"develop","optional":false},{"id":5251523435,"package_name":"pytest-mock","ecosystem":"pypi","requirements":"==3.7.0","direct":false,"kind":"develop","optional":false},{"id":5251523436,"package_name":"setuptools","ecosystem":"pypi","requirements":"==60.9.3","direct":false,"kind":"develop","optional":false},{"id":5251523437,"package_name":"toml","ecosystem":"pypi","requirements":"==0.10.2","direct":false,"kind":"develop","optional":false},{"id":5251523438,"package_name":"tomli","ecosystem":"pypi","requirements":"==2.0.1","direct":false,"kind":"develop","optional":false},{"id":5251523439,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"==4.1.1","direct":false,"kind":"develop","optional":false},{"id":5251523440,"package_name":"wrapt","ecosystem":"pypi","requirements":"==1.13.3","direct":false,"kind":"develop","optional":false}]}],"score":5.4116460518550396,"created_at":"2023-09-13T08:45:13.126Z","updated_at":"2026-04-09T00:01:17.246Z","avatar_url":"https://github.com/Open-Acidification.png","language":"Python","category":"Hydrosphere","sub_category":"Ocean Carbon and Temperature","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Tank Controller in Python\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n\n## Project Motivations\n\nUpdate the `TankController` code from C++ to Python and run on a Raspberry Pico.\n\n\n## Requirements\n\nThe system should have Python and pipenv.\nThe development version also needs Tkinter which can be found in python3-tk for Ubuntu.\n\n## Developer Instructions\n\n### Run in Local Environment\n\nTo run in a local environment with mocked devices (with the UI State Machine integrated)\n\n``` sh\n./run_gui.sh\n```\n\n### Update Python Virtual Environment\n\nRun `pipenv install` in the terminal to get the latest dependencies and update the lockfile.\n\n### Virtual Environment\n\n```sh\npython3 -m venv .venv\nsource .venv/bin/activate\npip3 install --user pipenv\n```\n\n## Testing\n\nTo perform Pytest tests for the devices and UI states.\n\n``` sh\n./test.sh\n```\n\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.linkedin.com/in/kadensukachevin/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/26241731?v=4?s=100\" width=\"100px;\" alt=\"Kaden Sukachevin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKaden Sukachevin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kadensu\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kadensu\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/issues?q=author%3Akadensu\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/prestoncarman\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3517157?v=4?s=100\" width=\"100px;\" alt=\"Preston Carman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePreston Carman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=prestoncarman\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/issues?q=author%3Aprestoncarman\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/KonradMcClure\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/66455502?v=4?s=100\" width=\"100px;\" alt=\"Konrad McClure\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKonrad McClure\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=KonradMcClure\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Noah-Griffith\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/78978886?v=4?s=100\" width=\"100px;\" alt=\"Noah-Griffith\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNoah-Griffith\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=Noah-Griffith\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/d-cryptic\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/52271502?v=4?s=100\" width=\"100px;\" alt=\"Barun Debnath\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBarun Debnath\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=d-cryptic\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://kieransukachevin.github.io/first%20portfolio/portfolio.html\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/54186484?v=4?s=100\" width=\"100px;\" alt=\"Kieran Sukachevin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKieran Sukachevin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kieransukachevin\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kieransukachevin\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jsoref\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2119212?v=4?s=100\" width=\"100px;\" alt=\"Josh Soref\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJosh Soref\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=jsoref\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/TaylorSmith28\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/83837157?v=4?s=100\" width=\"100px;\" alt=\"TaylorSmith28\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTaylorSmith28\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=TaylorSmith28\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=TaylorSmith28\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e \u003c!-- gitleaks:allow --\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["water","changed-file","housing","kicad","oa-box","ph-stat-unit","tank-controller","composable","mock","simulator"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/46092","html_url":"https://ost.ecosyste.ms/projects/46092"}