{"id":22015935,"url":"https://github.com/valentinnsoare/wordtally","last_synced_at":"2025-05-07T01:05:55.557Z","repository":{"id":267973985,"uuid":"901450962","full_name":"valentinnsoare/wordtally","owner":"valentinnsoare","description":"WordTally - Build Your Own wc Tool","archived":false,"fork":false,"pushed_at":"2024-12-10T23:55:31.000Z","size":60429,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T01:05:43.832Z","etag":null,"topics":["asynchronous","commons-cli","completablefuture","concurrency","gitlab-ci-cd","graalvm","java-17","lombok","maven","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","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/valentinnsoare.png","metadata":{},"created_at":"2024-12-10T17:21:42.000Z","updated_at":"2025-02-11T22:33:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"cec93a1a-f376-47b0-b777-6eedde4d4317","html_url":"https://github.com/valentinnsoare/wordtally","commit_stats":null,"previous_names":["valentinnsoare/wordtally"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentinnsoare%2Fwordtally","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentinnsoare%2Fwordtally/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentinnsoare%2Fwordtally/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valentinnsoare%2Fwordtally/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valentinnsoare","download_url":"https://codeload.github.com/valentinnsoare/wordtally/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252793667,"owners_count":21805058,"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":["asynchronous","commons-cli","completablefuture","concurrency","gitlab-ci-cd","graalvm","java-17","lombok","maven","spring-boot"],"created_at":"2024-11-30T04:30:44.029Z","updated_at":"2025-05-07T01:05:55.536Z","avatar_url":"https://github.com/valentinnsoare.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## :abc: WordTally - Build Your Own wc Tool Coding Challenge\n\u003e https://codingchallenges.fyi/challenges/challenge-wc/\n\n[![wordtally - Unix wc tool replica](https://img.shields.io/static/v1?label=wordtally\u0026message=Unix+wc+tool+replica\u0026color=2ea44f)](https://github.com/valentinsoare)\n\n\u003cbr\u003e\n\n:arrow_forward: A wc tool replica made in Java 17 to print a newline, word, char\nand byte counts for each input file and a total number of lines, words, bytes and chars if more than one FILE is specified. \nA word is a non-zero-length sequence of printable characters delimited by white space.\n\n:arrow_forward: In case there is no file as input, the app will read from standard input. \nSince this is a linux/unix command, this standard input,\nwhich is created by another tool and redirected with pipe (|),\nwill be read from the stdin file descriptor of the process id of wordtally\n(/proc/PID-number/fd/0).\n\n\u003cbr\u003e\n\n\u003c!--- [![final-Small.png](https://i.postimg.cc/DfLpz7ky/final-Small.png)](https://moviesondemand.io) ---\u003e\n\n### Concepts/technologies used:\n1. [X] Object-Oriented Programming Principles;\n2. [X] Collections Framework — Array, ArraysList and HashMap;\n3. [X] Lambda functions, Streams and Method references along with serialization into a JSON;\n4. [X] Design patterns from the GoF: Singleton and Builder along with Dependency Injection and Inversion of Control;\n5. [X] Spring Boot with CommandLineRunner interface and Lombok, Jackson and Apache Commons CLI dependencies;\n6. [X] GraalVM for conversion from .jar into a binary file;\n7. [X] Logging and banner were disabled (spring.main.banner-mode=OFF, logging.level.root=WARN) on Spring Boot along with Tomcat Server (spring.main.web-application-type=NONE);\n8. [X] Asynchronous with Concurrency processing implemented with CompletableStage/CompletableFuture API to handle multiple files as input much easier and faster;  \n9. [X] IO and NIO libraries for input/output processing;\n\n\u003cbr\u003e\n\n\u003e [!NOTE]\n\u003e Challenge is :100: completed!\n\n\u003cbr\u003e\n\n## :man_technologist: How To:\n\n:white_check_mark: In the target directory in this repo you can find everything you need to run the app, the .jar and binary file made with GraalVM.\n\n[![Screenshot-from-2024-04-21-07-46-08.png](https://i.postimg.cc/PqRf6LtY/Screenshot-from-2024-04-21-07-46-08.png)](https://moviesondemand.io)\n\n\u003cbr\u003e\n\n:white_check_mark: Use it with short options and files as input.\n\n![](contentforreadmepage/WordTallyClassicOptions.gif)\n\n\u003cbr\u003e\n\n:white_check_mark: Use it with short/long options with files or standard input.\n\n![](contentforreadmepage/WordTallyWithLongOptions.gif)\n\n\u003cbr\u003e\n\n:white_check_mark: What happens when proper input is not provided (wrong options, files, etc).\n\n![](contentforreadmepage/WordTallyWithErrorsHelpAndRedirectToAnotherCommand.gif)\n\n:point_right: If you want to see the code and make additions, you can clone this repo and try it. In case you want a binary file\nas a final product, then you need to install SDKMAN from sdkman.io and then with sdk GraalVM (22.3.r17-nik). \nPlease know that for this project I'm using Java 17 Corretto from Amazon.\nBefore you start to build the binary file with Maven, make sure that Runtime Environment is set to GraalVM as you can see bellow:\n```\n[root@republic]# java --version\nopenjdk 17.0.5 2022-10-18 LTS\nOpenJDK Runtime Environment GraalVM 22.3.0 (build 17.0.5+8-LTS)\nOpenJDK 64-Bit Server VM GraalVM 22.3.0 (build 17.0.5+8-LTS, mixed mode, sharing)\n[root@republic]#\n```\n\n\u003c!---\u003cbr\u003e\n\n:arrow_forward: Current UML diagram:\n\n[![WordTallyUMLDiagram.png](https://i.postimg.cc/ydT5MsVH/Word-Tally-UMLDiagram.png)](https://moviesondemand.io)\n\n\u003cbr\u003e\n\n[![valentinsoare - wordtally](https://img.shields.io/static/v1?label=valentinsoare\u0026message=wordtally\u0026color=blue\u0026logo=github)](https://github.com/valentinsoare/wordtally \"Go to GitHub repo\")\n[![stars - wordtally](https://img.shields.io/github/stars/valentinsoare/wordtally?style=social)](https://github.com/valentinsoare/wordtally)\n[![forks - wordtally](https://img.shields.io/github/forks/valentinsoare/wordtally?style=social)](https://github.com/valentinsoare/wordtally)\n\n[![GitHub release](https://img.shields.io/github/release/valentinsoare/wordtally?include_prereleases=\u0026sort=semver\u0026color=blue)](https://github.com/valentinsoare/wordtally/releases/tag/0.0.1)\n[![License](https://img.shields.io/badge/License-MIT-blue)](#license)\n[![issues - wordtally](https://img.shields.io/github/issues/valentinsoare/wordtally)](https://github.com/valentinsoare/wordtally/issues)\n\n### License\n\nReleased under [MIT](/LICENSE) by [@valentinsoare](https://github.com/valentinsoare). ---\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalentinnsoare%2Fwordtally","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalentinnsoare%2Fwordtally","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalentinnsoare%2Fwordtally/lists"}