{"id":22340936,"url":"https://github.com/fredrikaugust/crier","last_synced_at":"2025-07-21T20:31:14.415Z","repository":{"id":83667179,"uuid":"107051264","full_name":"FredrikAugust/crier","owner":"FredrikAugust","description":"Partial erlang implementation of the IRC protocol","archived":false,"fork":false,"pushed_at":"2017-10-20T11:41:31.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-10T04:03:53.820Z","etag":null,"topics":["erlang","irc","irc-protocol","irc-server"],"latest_commit_sha":null,"homepage":"","language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FredrikAugust.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":"2017-10-15T21:42:00.000Z","updated_at":"2018-08-06T19:16:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"9247f4d1-561e-4df6-a18f-e064c565739e","html_url":"https://github.com/FredrikAugust/crier","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/FredrikAugust/crier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FredrikAugust%2Fcrier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FredrikAugust%2Fcrier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FredrikAugust%2Fcrier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FredrikAugust%2Fcrier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FredrikAugust","download_url":"https://codeload.github.com/FredrikAugust/crier/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FredrikAugust%2Fcrier/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266374974,"owners_count":23919499,"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-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["erlang","irc","irc-protocol","irc-server"],"created_at":"2024-12-04T07:42:17.820Z","updated_at":"2025-07-21T20:31:14.389Z","avatar_url":"https://github.com/FredrikAugust.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"crier\n=====\n\n**IMPORTANT NOTE:**\n\nThis was not supposed to evolve into the next official IRC protocol implementation\nor anything like that. This was meant to be a _fun_ way for me to learn erlang, and\ntruth be told, it was quite fun.\n\nThough, as it was my first interaction with IRC (except for usage), the code in\nhere is an unholy mashup of anti-patterns in erlang. Worst case example; if you\nspam for 2 seconds, every message will be delayed by about 2 seconds from the\nprevious one. Kind of like the anti-spam on the freenode network, except theirs\nis intentional.\n\nFeel free to do whatever you want with this code, as I probably won't be maintaining\nit after it _works_.\n\n**END IMPORTANT NOTE**\n\nHow this should have been done\n------------------------------\n\n- Have two different state managers for users and channels\n- Don't throw all commands at one synchronous process, this is what created the enormous bottleneck we have now\n- Keep as much as you can asynchronous, as this will spawn another process that doesn't lock up the process\n    - Make almost all IRC commands run asynchronously on the server; there is no reason for us to wait for a confirmation as to whether the message was sent or not. We can let the client handle this\n- Rely more on the client for state management\n- Pay more attention to data structure to avoid passing the entire state around to sync. processes\n\nA partial implementation of the IRC protocol.\n\nThis is not meant to be used in production, but a project for me to learn more\nabout concurrency and the IRC protocol.\n\nUsage\n-----\n\n    $ rebar3 release\n    $ ./_build/default/rel/crier/bin/crier \u003cstart|foreground\u003e\n    \nNotes\n-----\n\nThis will run the IRC server on `localhost/5000` (IRC format, `localhost:5000`).\n\nImplementation status can partially be found in the `TODO.org` file, a more\ndetailed list will be added to this file later.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffredrikaugust%2Fcrier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffredrikaugust%2Fcrier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffredrikaugust%2Fcrier/lists"}