{"id":20557008,"url":"https://github.com/sharpvik/purr","last_synced_at":"2026-01-27T12:36:39.602Z","repository":{"id":230917651,"uuid":"780435066","full_name":"sharpvik/purr","owner":"sharpvik","description":"Protocol for Universal Request-Response Communication","archived":false,"fork":false,"pushed_at":"2024-10-12T19:04:04.000Z","size":722,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T02:05:29.149Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/sharpvik.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":"2024-04-01T13:30:24.000Z","updated_at":"2024-10-12T19:04:07.000Z","dependencies_parsed_at":"2024-06-19T14:35:05.020Z","dependency_job_id":"c16b63aa-4bbd-40bb-90d1-24c7b047be7e","html_url":"https://github.com/sharpvik/purr","commit_stats":null,"previous_names":["sharpvik/purr"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sharpvik/purr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpvik%2Fpurr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpvik%2Fpurr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpvik%2Fpurr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpvik%2Fpurr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sharpvik","download_url":"https://codeload.github.com/sharpvik/purr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpvik%2Fpurr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28813215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"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"}},"keywords":[],"created_at":"2024-11-16T03:34:17.327Z","updated_at":"2026-01-27T12:36:39.586Z","avatar_url":"https://github.com/sharpvik.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Inspire (interview test task)\n\n## Usage instructions\n\n### Test\n\n```bash\ngo test ./...\n```\n\n### Run in Docker (locally)\n\n```bash\ndocker-compose up\n```\n\n![demo](./demo.png)\n\n## How it came to be\n\n### Preface\n\nSome time ago I wrote [PURR](https://github.com/sharpvik/purr)\n(Protocol for Universal Request-Response Communication) to teach my friend how\nto implement custom TCP protocols in Go. I took it as the foundation, added\nproof-of-work checking to the request-response cycle and _voila_!\n\nI used [go-pow](github.com/bwesterb/go-pow) as my PoW algorithm.\n\n### Main\n\nOnce that was done, all that's left to do is fill up the [cmd](./cmd) folder\nwith the `main` files (client and server) that satisfy functional requirements.\nI called the server - `teach`; and the client is called - `learn`.\n\nFor the server, I found some quotes\n[here](https://github.com/gophergala/wisdom/blob/master/data/populate_db.go_example)\nand copied them over as strings.\n\n### Dockerization\n\nDockerfiles are stored in the [.docker](./.docker) folder. The resulting images\nare built `FROM scratch` and contain just the Go binary, which makes them nice\nand lightweight at around 3MB each.\n\n```text\nREPOSITORY  TAG     IMAGE ID      CREATED         SIZE\nlearn       latest  d2a74e15d055  17 minutes ago  3.19MB\nteach       latest  0dfd6d881028  17 minutes ago  3.26MB\n```\n\n## Notes\n\nI wouldn't call this a _production-ready_ technology. The server doesn't\nimplement any kind of graceful connection handling (e.g. telling the client\nwhat's wrong in case of a transaction error).\n\nThis is simply a PoC server that uses PoW to PIMAGSE (prove I'm a good software\nengineer). Yeah, it's a pun. Hope you appreciate a little bit of humour.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharpvik%2Fpurr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsharpvik%2Fpurr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharpvik%2Fpurr/lists"}