{"id":18319716,"url":"https://github.com/saintzet/exchangequotes","last_synced_at":"2025-04-09T14:22:14.792Z","repository":{"id":64330207,"uuid":"573363980","full_name":"SaintZet/ExchangeQuotes","owner":"SaintZet","description":"Test assignment for position .NET middle developer.","archived":false,"fork":false,"pushed_at":"2022-12-28T14:54:42.000Z","size":90,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-15T08:19:33.838Z","etag":null,"topics":["math","modular-design","modular-monolith","statistics","test-assignment","thread-safe","threads","udp","xml","xunit-tests"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SaintZet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-12-02T09:36:47.000Z","updated_at":"2023-12-17T01:40:46.000Z","dependencies_parsed_at":"2023-01-15T12:30:37.498Z","dependency_job_id":null,"html_url":"https://github.com/SaintZet/ExchangeQuotes","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaintZet%2FExchangeQuotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaintZet%2FExchangeQuotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaintZet%2FExchangeQuotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SaintZet%2FExchangeQuotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SaintZet","download_url":"https://codeload.github.com/SaintZet/ExchangeQuotes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248054200,"owners_count":21039952,"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":["math","modular-design","modular-monolith","statistics","test-assignment","thread-safe","threads","udp","xml","xunit-tests"],"created_at":"2024-11-05T18:14:03.872Z","updated_at":"2025-04-09T14:22:14.763Z","avatar_url":"https://github.com/SaintZet.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Exchange Quotes\n\nTest assignment on position .NET middle developer for a Ukrainian company [Profit Center FX](https://profitcenterfx.com).\n\nThe project used DepenedencyInjection, Modular Monolith design, xUnit tests for math logic, concurrent velues for thread safe math library.\n\n## The task\n\n### Server application\n\nInfinitely generates random numbers in the range (to emulate the subject area - the flow of quotes from the stock exchange), sends multicast to\nudp without delay.\n\nThe range and multicast group is configured through a separate xml config.\n\n### Client application\n\nIt accepts data by udp, counts for all received: arithmetic mean, standard deviation, mode and median.\nThe total number of packets received can be from a trillion or more.\n\nThe calculated values are output to the console on demand (pressing enter).\n\nThe application must control the receipt of all packets, the number of lost packets must be displayed together with statistics (to force packet loss, you need to add a delay to receiving messages,\napproximately once per second).\n\nReceiving packets and counting should be implemented in different streams with minimal delays.\n\nMulticast group and receive delay must be configured through a separate xml config (not in app.config).\n\n**Important requirement**: the application must be optimized for speed as much as possible\nwork, taking into account the amount of data received and issue a solution as quickly as possible (in\nwithin a few milliseconds) - for exchanges, every microsecond matters.\n\nThe application must work for a long time (week-month) without crashes\ninternal errors, as well as in case of network errors.\n\n## Getting Started\n\n### Dependencies\n\n.NET 6.0 Runtime\n\n### Installing\n\nJust clone repo on PC.\n\n### Executing program\n\nSet up a client and server multi-launch, or just launch a server instance and a number of client instances.\n\n## Authors\n\nChepets Serhii \u003cbr /\u003e \nContacts: [LinkedIn](https://www.linkedin.com/in/serhii-chepets-412b46223/) / [GitHub](https://github.com/SaintZet) / [Telegram](https://t.me/SaintZet)\n\n## Version History\n\n* v1.0.0\n    * Initial Release\n\n## License\n\nThis project is unlicense.\n\n## Acknowledgments\n\n* [Median in a stream of integers](https://www.geeksforgeeks.org/median-of-stream-of-integers-running-integers/)\n* [Heaps: Find the Running Median](https://www.hackerrank.com/challenges/ctci-find-the-running-median/problem)\n* [Standard Deviation on Streaming Data](https://nestedsoftware.com/2018/03/27/calculating-standard-deviation-on-streaming-data-253l.23919.html)\n* [Simple Moving Average calculator](https://andrewlock.net/series/creating-a-simple-moving-average-calculator-in-csharp/)\n* [Thread safety in C#](https://medium.com/@supriyaghevade77/thread-safety-in-c-b144a5d9731c#:~:text=Thread%20safety%20is%20the%20technique,run%20concurrently%20without%20break%20function.)\n* [Thread-Safe Collections](https://learn.microsoft.com/en-us/dotnet/standard/collections/thread-safe/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaintzet%2Fexchangequotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaintzet%2Fexchangequotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaintzet%2Fexchangequotes/lists"}