{"id":15820833,"url":"https://github.com/dotmh/language-learning","last_synced_at":"2026-04-10T07:47:25.311Z","repository":{"id":173057532,"uuid":"650151951","full_name":"dotmh/language-learning","owner":"dotmh","description":"A scenario used to learn new programming languages","archived":false,"fork":false,"pushed_at":"2025-01-29T16:44:32.000Z","size":161,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T18:18:16.746Z","etag":null,"topics":["deno","dotmh","go","kotlin","learning","nodejs","typescript"],"latest_commit_sha":null,"homepage":"","language":"C#","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/dotmh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"support/api/api.ts","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-06T13:00:43.000Z","updated_at":"2025-01-29T16:43:49.000Z","dependencies_parsed_at":"2023-12-16T15:42:21.020Z","dependency_job_id":null,"html_url":"https://github.com/dotmh/language-learning","commit_stats":{"total_commits":14,"total_committers":2,"mean_commits":7.0,"dds":0.0714285714285714,"last_synced_commit":"79dbda098e9f053e423e9c00c74de8313c58d10f"},"previous_names":["dotmh/currency-project","dotmh/language-learning"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotmh%2Flanguage-learning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotmh%2Flanguage-learning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotmh%2Flanguage-learning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotmh%2Flanguage-learning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotmh","download_url":"https://codeload.github.com/dotmh/language-learning/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246598147,"owners_count":20802971,"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":["deno","dotmh","go","kotlin","learning","nodejs","typescript"],"created_at":"2024-10-05T07:06:54.596Z","updated_at":"2026-04-10T07:47:20.270Z","avatar_url":"https://github.com/dotmh.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Language Learning Scenario\n\n## About\n\nI enjoy learning new languages in pursuit of that goal I came up with a basic scenario that I could use to explore new languages and frameworks.\n\nThe idea of the scenario is that it is simple enough to not require in depth knowledge of the language so making it easier to learn the language. It also can cover some common tasks that I would need to do as a front end developer.\n\n## The Scenario\n\nYou have returned from a 2 week trip in Japan. You didn't spend all the money that you convert to the Japanese Yen (¥) to take with you. You there for have a wallet fall of Japanese currency. The task is to covert the ¥ amount back to British Pound Sterling (£).\n\n### The code should\n\n1. take in the amount of each coin or note that you have.\n2. show a summary of the wallet totals i.e. how much value of each coin or note you have\n3. get the total in ¥\n4. get the current exchange rate from [Free Currency API](https://freecurrencyapi.com) for ¥ to £.\n5. display the total in ¥ and in £ to 2 decimal places.\n\n### Wallet Contents\n\n#### Notes\n\n- 5 x ¥10,000 notes\n- 1 x ¥5000 note\n- 5 \\* ¥1000 notes\n\n#### Coins\n\n- 1 x ¥500 coin\n- 4 x ¥100 coins\n- 5 x ¥50 coins\n- 8 x ¥10 coins\n- 7 x ¥5 coins\n- 14 x ¥1 coins\n\n## Scope\n\n### Reducing Scope\n\nThis is already a simple task, but with some languages or situations making HTTP requests can be very complex.\n\nYou can therefore reduce scope by removing the part around getting a live conversion rate for ¥ to £.\nYou then replace the live exchange rate with a fixed value.\n\n### Extending Scope\n\nThere are number of ways that scope can be expand\n\n#### User Input\n\nAs an example app, having the wallet (the amount of coins and notes that you have) hardcoded is fine\nbut in the real world it would be better to allow the user to input that data. so you could add\n\n- allow the program to loop through each note and coin and ask the user how much they have.\n\n#### Graphical User Interface\n\nThe next cool step might be to add a Graphical User Interface (GUI). Real Users prefer a GUI as they find Command Line Interface (CLI) apps much more intimidating. In this case you might add\n\n- show the user graphical the total in ¥ and in £\n\nyou could also combine this with the first scope extension to allow the user to enter the how much of\neach coin or note they have inside your GUI.\n\n- allow the user to add how much of each coin or note they have using the GUI.\n\n#### Expanding the Currencies\n\nThe Current app is very much focused on a single purpose that off converting ¥ to £ but to expand it\nin to a much more useful application might be to add in extra currencies. This could take the form of\nadding extra currencies to convert from , extra currencies to convert too or both. This is the least\ninteresting from a coding point of view because it will be more about Data. You would need to get\nall the different coins and notes used by each currency.\n\nThe biggest logic change will be handling the sub unit of currencies used by some currencies such as\nCents (¢) on the Dollar ($) or pence (p) on the Pound (£). Although again this is pretty simple as almost all\ncurrencies have a 100 sub units of currency to the main.\n\nWith all of these scope extensions added together you would have a full app that could be useful for\nany user.\n\n- Allow the user to change which currency they want to convert to\n- Allow the user to change which currency the user wants to convert from\n- Show the correct Notes and Coins for the currency the user has chosen to convert from.\n\n## API\n\nYou can get the above data, as well as Japanese coin and note denominations from an API endpoint.\n\nMake a [HTTP GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET)\nrequest to \u003chttps://learn.api.dotmh.dev\u003e\n\n[![Deno JS](https://img.shields.io/badge/deno%20js-000000?style=for-the-badge\u0026logo=deno\u0026logoColor=white)](/support/api/api.ts)\n\n## Implementations\n\nPlease note these implementations (with the exemption of Typescript) are all created while learning and so may not reflect best practise. These are not intended to be definitive examples of each language.\n\n[![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](/typescript/node/index.ts)\n[![Kotlin](https://img.shields.io/badge/kotlin-%237F52FF.svg?style=for-the-badge\u0026logo=kotlin\u0026logoColor=white)](/kotlin/currency-convertor/src/main/kotlin/Main.kt)\n[![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge\u0026logo=go\u0026logoColor=white)](/go/currency.go)\n[![C#](https://img.shields.io/badge/c%23-%23239120.svg?style=for-the-badge\u0026logo=csharp\u0026logoColor=white)](cs/curreny-calculator/)\n\n### Notes for running\n\n#### Environment Variables\n\nAll examples expect the API key for [Free Currency API](https://freecurrencyapi.com) to be stored in the Environment variable `FREE_CURRENCY_API_KEY`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotmh%2Flanguage-learning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotmh%2Flanguage-learning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotmh%2Flanguage-learning/lists"}