{"id":19615005,"url":"https://github.com/ghurtchu/countributions","last_synced_at":"2025-04-28T02:31:04.837Z","repository":{"id":209281351,"uuid":"723515175","full_name":"Ghurtchu/COUNTributions","owner":"Ghurtchu","description":"github organization contributors aggregator","archived":false,"fork":false,"pushed_at":"2024-05-28T13:40:23.000Z","size":691,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-29T05:29:19.041Z","etag":null,"topics":["cats","cats-effect","functional-programming","github-api","http4s","parallelism","scala","scala3"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/Ghurtchu.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":"2023-11-25T22:52:56.000Z","updated_at":"2024-05-28T13:40:26.000Z","dependencies_parsed_at":"2024-02-18T20:23:00.333Z","dependency_job_id":"b076ad59-dbd6-4a50-919d-c884f9229228","html_url":"https://github.com/Ghurtchu/COUNTributions","commit_stats":{"total_commits":23,"total_committers":2,"mean_commits":11.5,"dds":0.04347826086956519,"last_synced_commit":"680420ba1e269f1bb60acfe86eda1b994ea2e52c"},"previous_names":["ghurtchu/countributions","scalevolvable/countributions"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ghurtchu%2FCOUNTributions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ghurtchu%2FCOUNTributions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ghurtchu%2FCOUNTributions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ghurtchu%2FCOUNTributions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ghurtchu","download_url":"https://codeload.github.com/Ghurtchu/COUNTributions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224092034,"owners_count":17254152,"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":["cats","cats-effect","functional-programming","github-api","http4s","parallelism","scala","scala3"],"created_at":"2024-11-11T10:54:53.525Z","updated_at":"2025-04-28T02:31:04.806Z","avatar_url":"https://github.com/Ghurtchu.png","language":"Scala","readme":"Video demo: https://www.youtube.com/watch?v=fPmFuC7H12E\n\nBlog version: [https://blog.rockthejvm.com/cats-effect-parallelism/](https://rockthejvm.com/articles/functional-parallel-programming-with-scala-and-cats-effect)\n\nFrontend:\n![MyImage](assets/frontend.png)\n\nRunning locally:\n- clone the repo\n- navigate to root directory\n- `sbt run`\n- hit localhost:9000\n\nSome people say that functional programming is slow. This app demonstrates that they are bulshitting.\n\nParallelism is a piece of cake when programs are expressions which can be composed and manipulated like normal strings and integers.\n\nThe app aggregates all the contributors for a certain GitHub organization and sorts them by their contributions.\n\nThe parallelism is only limited by the restrictions GitHub REST API.\n\nHowever since `cats-effect` Runtime works on `Fiber`-s, it's inexpensive to abuse them 😄\n\nYou are welcome to improve the implementation.\n\n`curl localhost:9000/org/{org_name}` will yield sorted JSON response which looks like:\n```json\n{\n  \"count\": 3,\n  \"contributors\": [\n    {\n      \"login\": \"user1\",\n      \"contributions\": 5000\n    },\n    {\n      \"login\": \"user2\",\n      \"contributions\": 2500\n    },\n    {\n      \"login\": \"user3\",\n      \"contributions\": 1000\n    }\n  ]\n}\n```\n\nLatency benchmarks for different organizations: \n- [quantori](json/quantori.json) - 3 seconds, 59 public repos, 604 contributors\n- [typelevel](json/typelevel.json) - 4 seconds, 101 public repos, 1077 contributors\n- [zio](json/zio.json) - 4 seconds, 94 public repos, 1276 contributors\n- [lightbend](json/lightbend.json) - 5 seconds, 109 public repos, 1558 contributors\n- [facebook](json/facebook.json) - 6 seconds, 128 public repos, 8687 contributors\n- [apache](json/apache.json) - 10 seconds, 2534 repos, 10818 contributors\n- [google](json/google.json) - 14 seconds, 2560 public repos, 12796 contributors\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghurtchu%2Fcountributions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fghurtchu%2Fcountributions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghurtchu%2Fcountributions/lists"}